如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?
我有一个主应用程序项目和一个类库DLL。主应用程序引用类库DLL,DLL本身引用一些第三方DLL。当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但它不会复制第三方DLL。
我不想从主应用程序项目添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用。
答案 0 :(得分:37)
您可以使用项目属性窗口实现此目的。 Visual Studio允许您定义要在构建之前,之后或之后发生的事件。要进入项目属性窗口,只需在解决方案资源管理器窗口中右键单击您的项目,然后单击“属性”。从左侧转到“构建事件”选项卡。
在后期构建框中输入一些复制命令。例如:
copy "$(SolutionDir)mydll.dll" "$(TargetDir)"
$(SolutionDir)
和$(TargetDir)
都是预定义变量。标准语法如下:
copy "source directory and file name" "destination directory"
如果您点击“编辑帖子构建...”按钮,它会弹出一个框,其中包含您可以插入的这些预定义变量的列表(如$(SolutionDir)
和$(TargetDir)
)< / p>
作为旁注,这是复制其他文件的有用过程,例如自定义配置文件,图像或项目可能具有的任何其他依赖项。
答案 1 :(得分:22)
以下片段适合我:
<Project>
...
<ItemGroup>
<Content Include="Path\to\dll\dllname.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
...
</Project>
这适用于C#。 对于本机C ++,它仍然将dll复制到输出文件夹,但是这种依赖关系在Visual Studio中不可见,应该直接在项目文件中进行编辑。
测试非平凡的例子 我试图运行C#项目A,它依赖于本机C ++项目B.B项目依赖于第三方本机dll C - 这种依赖是通过项目文件中的片段实现的。 当我构建A时,C被复制到二进制文件夹。
我在Visual Studio 2010中尝试过它。
答案 2 :(得分:6)
看看Alex Yakunin提供的这个解决方案 http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html 它对我来说非常好用 - 表示正在使用的DevExpress库具有其他依赖性,这在部署时会导致问题)
这两个步骤 - 对于引用的库,copy-local = true,为间接引用添加msbuild目标,为我自动构建设置。
答案 3 :(得分:2)
我不建议这样做。最终,复制的程序集数量会增加N ^ 2(并且可能会被重建)。如果可能,您应该让所有项目将其程序集放在相同的$(OutDir)中。如果您正在使用TFS,Team Build会为您执行此操作。
答案 4 :(得分:2)
转到主应用程序,引用,到您的类库引用。
设置&#34;复制本地&#34;真实。
现在它将类库的bin目录复制到主应用程序bin目录中。包括任何子依赖第三方dll。
答案 5 :(得分:2)
我不想让我的依赖项文件位于项目根文件夹中但位于子文件夹中。但是文件必须放在构建文件夹的根文件夹中。
我的构建事件如下所示:
Command: call xcopy /S /Y "$(SolutionDir)Dependencies\*.*" "$(TargetDir)"
如果&#34;依赖关系&#34;还包含子文件夹,就像我的一样。
答案 6 :(得分:0)
如果只想在构建后复制新文件,则还可以将 xcopy 与标志 / i / d / y
一起使用xcopy "$(ProjectDir)SubDir\*.dll" "$(TargetDir)" /i /d /y
答案 7 :(得分:-3)
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>
答案 8 :(得分:-4)
除了在项目本身中添加对.dll的引用之外,我真的不知道有什么方法可以做到这一点。我们在这里的一些项目中遇到了这个问题,我们发现的唯一解决方案是添加引用。我想说我们的一位开发人员做了一些研究,发现这是唯一的解决方案,但不要引用我的。