我正在尝试为.Net程序集创建NuGet程序包,它会对原生的win32 dll进行pinvoke.我需要将程序集和本机dll打包,并将程序集添加到项目引用中(此部分没有问题),并且应将本机dll复制到项目输出目录或其他相关目录中.
我的问题是:
我有一个使用DLLImport使用非托管C++ DLL的托管C#dll.一切都很好.但是,我想在我的托管DLL中嵌入非托管DLL,如Microsoft解释:
所以我将非托管dll文件添加到我的托管dll项目,将属性设置为'Embedded Resource'并将DLLImport修改为:
[DllImport("Unmanaged Driver.dll, Wrapper Engine, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null",
CallingConvention = CallingConvention.Winapi)]
Run Code Online (Sandbox Code Playgroud)
其中'Wrapper Engine'是我托管DLL的程序集名称'Unmanaged Driver.dll'是非托管DLL
当我跑步时,我得到:
访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))
我从MSDN和http://blogs.msdn.com/suzcook/看到了这应该是可能的......
如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?
我有一个主应用程序项目和一个类库DLL.主应用程序引用类库DLL,DLL本身引用一些第三方DLL.当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但它不会复制第三方DLL.
我不想从主应用程序项目添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用.
我正在使用Visual Studio 2012和C++开发Qt应用程序.
我能够编译并调试它,但是,不知何故,没有.dll文件在Debug或Release文件夹中.我已经尝试过其他一些帖子解决方案,但都没有效果.
那么,我如何让Visual Studio将所需的.dll文件复制到release文件夹中?
我认为它应该是一个选择.我刚刚开始考虑手工复制它.
我有一些本机 dll,必须根据平台条件将其复制到 bin 文件夹中。我希望将它们复制到引用该项目的项目的 bin 文件夹中。
如果我将构建操作设置为Content,它们将被复制到 bin 文件夹,但保留文件夹结构,因此它们不会位于 bin 文件夹中,而是位于子文件夹中。因此,当运行程序时,它将无法解析 dll,因为它们位于子文件夹中。
例如,如果我的项目文件中有此代码
<Choose>
<When Condition=" '$(Platform)'=='x86' ">
<ItemGroup>
<Content Include="nativedll\somelib\x86\somelib.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</When>
<When Condition=" '$(Platform)'=='x64' ">
<ItemGroup>
<Content Include="nativedll\somelib\x64\somelib.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</When>
</Choose>
Run Code Online (Sandbox Code Playgroud)
bin\nativedll\somelib\x86\somelib.dll如果是 x86,该 dll 将位于该文件夹中。
所以我尝试使用构建后脚本
<PostBuildEvent>
IF "$(Platform)" == "x86" (
xcopy /s /y "$(ProjectDir)\nativedll\somelib\x86" "$(TargetDir)"
)
IF "$(Platform)" == "x64" (
xcopy /s /y "$(ProjectDir)\nativedll\somelib\x64" "$(TargetDir)"
)
</PostBuildEvent>
Run Code Online (Sandbox Code Playgroud)
但是 dll 被复制到项目的 bin 文件夹中,而不是复制到引用它的项目的 bin 文件夹中。
所以我现在的解决方案是在使用此脚本的所有项目中添加一个构建后脚本。
在 Visual Studio …