我在我的项目中使用各种第三方程序集(本机,nuget包),这些程序集有时针对不同平台(x86 / amd64)进行了优化。 Visual Studio会自动将它们复制到应用程序根目录(通常是bin \ Debug \ PLATFORM),这会产生完全非破坏性的混乱。
现在我正在寻找一种方法来自动将第三方dll复制到自定义子目录中。我知道从应用程序根目录(app.config或代码中的privatePath)以外的其他位置LOAD程序集的各种方法,但不知道如何自动将它们复制到那里。
所需结构
bin\
release\
x64\
MyApp.exe
MyApp.exe.config
cfg\
custom.config
lib\
ninject\
Ninject.dll
Ninject.Extensions
Ninject.Extensions.Logging
SomeNativeDll\
native_x64.dll
OtherStuff.dll
x86\
...
我已经找到了Post Build Events的方法,但是使用一些批处理脚本语言来声明每个引用都是PITA!
答案 0 :(得分:4)
一种可能的解决方案是在您的结构中添加一个额外的项目。以下步骤重新创建:
内容文件(但实际上是你的dll)现在被复制到主项目输出文件夹中的相同文件夹结构中。
为了支持平台特定的dll,它变得有点棘手。
卸载项目并找到您的原生文件:
<Content Include="test\Some_X86.dll" >
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
并为其添加条件
<Content Include="test\Some_X86.dll" Condition="'$(Platform)' == 'x86'" >
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
如果您只想在输出中包含x86目标的文件。