如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?
我有一个主应用程序项目和一个类库DLL。主应用程序引用类库DLL,并且DLL本身引用一些第三方DLL。当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但不会复制第三方DLL。
我不想从主应用程序项目中添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用。
如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?
我有一个主应用程序项目和一个类库DLL。主应用程序引用类库DLL,并且DLL本身引用一些第三方DLL。当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但不会复制第三方DLL。
我不想从主应用程序项目中添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用。
Answers:
您可以使用项目属性窗口来实现。Visual Studio允许您定义在构建之前或之后发生的事件。要进入项目属性窗口,只需在解决方案资源管理器窗口中右键单击您的项目,然后单击“属性”。从左侧转到“构建事件”标签。
在构建后的框中,键入一些复制命令。例如:
copy "$(SolutionDir)mydll.dll" "$(TargetDir)"
其中$(SolutionDir)
和$(TargetDir)
均为预定义变量。标准语法如下:
copy "source directory and file name" "destination directory"
如果您点击“ edit post build ...”按钮,它将弹出一个框,其中列出了您可以插入的这些预定义变量(如$(SolutionDir)
和$(TargetDir)
)
附带说明,这是用于复制其他文件(例如自定义配置文件,图像或项目可能具有的任何其他依赖项)的有用过程。
copy
d .dll文件。
以下片段对我有用:
<Project>
...
<ItemGroup>
<Content Include="Path\to\dll\dllname.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
...
</Project>
这适用于C#。对于本机C ++,它仍将dll复制到输出文件夹,但是此依赖关系在Visual Studio中不可见,应直接在项目文件中对其进行编辑。
为了测试非平凡的示例,我尝试运行依赖于本机C ++项目B的C#项目A。B项目依赖于第三方本机dll C-这种依赖关系是通过上面项目文件中的片段实现的。当我构建A时,C被复制到二进制文件夹。
我在Visual Studio 2010中尝试过。
<Link>%(Filename)%(Extension)</Link>
内部内容<Content>
以避免创建整个目录结构,而仅复制文件。
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
仅在较新的版本(而不是每个版本)上才复制。
看看Alex Yakunin提供的此解决方案 http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html 它对我非常有效-明确使用DevExpress库的场景部署时导致问题的其他依赖项)
这两个步骤-被引用的库为copy-local = true,为间接引用添加msbuild目标,可以自动完成我的构建设置。
转到主应用程序参考,即您的类库参考。
将“本地复制”设置为True。
现在它将把您的类库的bin目录复制到主应用程序bin目录中。包括任何子依赖的第三方dll。
如果只想在构建后复制新文件,则还可以将xcopy与/ i / d / y标志一起使用
xcopy "$(ProjectDir)SubDir\*.dll" "$(TargetDir)" /i /d /y
100%确信这会起作用。只需将dll替换为您的个人参考即可。文件
<Reference Include="Xceed.Wpf.Toolkit">
<HintPath>..\..\..\3rdParty\Extended WPF Toolkit-2.2.1\Xceed.Wpf.Toolkit.dll</HintPath>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<SpecificVersion>False</SpecificVersion>
</Reference>
<Content Include="..\..\..\3rdParty\Extended WPF Toolkit-2.2.1\Xceed.Wpf.Toolkit.dll">
<Link>Xceed.Wpf.Toolkit.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<SpecificVersion>False</SpecificVersion>
</Content>