C#如何在构建中包括DLL依赖项?

时间:2018-11-07 19:30:22

标签: c# visual-c++ dll

我有一个可视的c ++项目(该项目构建到名为X的DLL),该项目引用了另一个DLL(称为Y)。

在X的可视C ++项目中,我通过项目设置,链接器,输入和其他依赖项设置了对Y的引用。

现在我有另一个项目,一个引用X的C#项目Z。我通过将X添加为项目依赖项将X包含在Z中。

出于某种原因,我需要先编译X,然后才能编译Z(该项目不会同时构建所有内容)。

但是当我运行Z并点击Z的引用时,出现一个异常“无法加载文件或程序集'X'或其依赖项之一”。

当我查看Z的build文件夹时,在那里看到X.dll,但是没有看到Y.dll。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

恐怕您需要手动编辑项目文件才能实现此行为。 (不幸的是,Visual C ++项目内部没有菜单可以执行此操作。)

我建议先备份,然后再开始编辑项目文件。

在Visual Studio中,您需要卸载X的项目文件(右键单击并在解决方案资源管理器中选择“卸载项目”)。

然后再次右键单击并选择“编辑X.vcxproj”。

Project 元素内,您需要添加一个这样的ItemGroup:

<ItemGroup Condition="'$(Configuration)'=='Release'">
  <Content Include="E:\full_path\Y.dll">
    <Link>Y.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <Content Include="E:\full_path\Yd.dll">
    <Link>Yd.dll</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

如果没有其他调试dll文件(或64位和32位版本),则只能使用一个Itemgroup并删除co​​ndition属性。然后它将Y.dll复制到所有项目输出。

然后保存您的编辑并重新加载项目(也单击鼠标右键)。

这解决了问题,因为现在项目“ Z”将知道在构建项目“ X”时,需要复制Y.dll 到项目“ X”的输出,或者引用“ X”的父项目

(使用变量而不是硬编码路径会更好,但我想使示例保持简单。)

我在许多引用第三方或开放源代码库的托管C ++项目中使用此功能。我花了一些时间才弄清楚这一点。

我希望这会有所帮助!

相关问题