在Visual Studio中复制DLL的依赖项

M. *_*ley 63 dll visual-studio

如何在Visual Studio中设置项目以复制项目引用之一所依赖的第三方DLL?

我有一个主应用程序项目和一个类库DLL.主应用程序引用类库DLL,DLL本身引用一些第三方DLL.当我编译主应用程序时,它会自动将类库DLL复制到其输出目录,但它不会复制第三方DLL.

我不想从主应用程序项目添加对第三方DLL的引用,因为主应用程序不使用它们,它们仅由类库使用.

Bri*_*ian 38

您可以使用项目属性窗口实现此目的.Visual Studio允许您定义要在构建之前,之后或之后发生的事件.要进入项目属性窗口,只需在解决方案资源管理器窗口中右键单击您的项目,然后单击"属性".从左侧转到"构建事件"选项卡.

在post-build框中输入一些复制命令.例如:

copy "$(SolutionDir)mydll.dll" "$(TargetDir)"
Run Code Online (Sandbox Code Playgroud)

哪里$(SolutionDir)$(TargetDir)都是预定义的变量.标准语法如下:

copy "source directory and file name" "destination directory"
Run Code Online (Sandbox Code Playgroud)

如果你单击"编辑后期构建..."按钮,它将弹出一个框,其中包含可以插入的这些预定义变量的列表(如$(SolutionDir)$(TargetDir))

作为旁注,这是复制其他文件的有用过程,例如自定义配置文件,图像或项目可能具有的任何其他依赖项.

  • 该副本是否可以包含通配符,如副本SOME_DIRECTORY\*.dll $(TargetDir)? (4认同)

ser*_*gtk 25

以下片段适合我:

<Project>
  ...
  <ItemGroup>
    <Content Include="Path\to\dll\dllname.dll">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  ...
</Project>
Run Code Online (Sandbox Code Playgroud)

这适用于C#.对于本机C++,它仍然将dll复制到输出文件夹,但是这种依赖关系在Visual Studio中不可见,应该直接在项目文件中进行编辑.

为了测试非平凡的例子,我尝试运行C#项目A,它依赖于本机C++项目B.B项目依赖于第三方本机dll C - 这种依赖是通过项目文件中的片段实现的.当我构建A时,C被复制到二进制文件夹.

我在Visual Studio 2010中尝试过它.

  • 这会将整个目录结构复制到bin.比如bin\Path\to\_dll\_dllname.dll他想要bin\dllname.dll (3认同)
  • 这就是我复制_single_文件的方法.dllname.dll是文件,而不是文件夹 (2认同)
  • 你应该在`<Content>`中添加`<Link>%(Filename)%(Extension)</ Link>`,以避免创建整个目录结构,只复制文件. (2认同)
  • 此外,`&lt;CopyToOutputDirectory&gt;PreserveNewest&lt;/CopyToOutputDirectory&gt;` 只会在更新时复制,而不是每次构建时复制。 (2认同)

Anu*_*noy 6

看看Alex Yakunin提供的这个解决方案 http://blog.alexyakunin.com/2009/09/making-msbuild-visual-studio-to.html 它非常适合我 - DevExpress库明确使用的场景有部署时导致问题的其他依赖项)

  • 注1:Visual Studio 2010似乎自动添加引用的dll,但msbuild没有.因此,自发布脚本使用msbuild以来,Alex的解决方案一直有效.
  • 注意2:还必须确保对于引用的库(代码中引用的库),copy-local实际上在csproj中设置为True,即使解决方案资源管理器说它是.最好的方法是设置copy-local = False,Save,set copy-local = True,Save.

这两个步骤 - 引用库的copy-local = true和间接引用的msbuild目标为我自动构建设置.