【问题标题】:Adding a native DLL path to managed console application将本机 DLL 路径添加到托管控制台应用程序
【发布时间】:2013-01-08 21:08:33
【问题描述】:

我有 3 个项目的 VS2010 解决方案:

  1. 本机 (C++) DLL
  2. 使用本机 DLL 的托管 (C#) DLL
  3. 使用托管 DLL 的托管 (C#) 控制台应用程序

我可以将托管 DLL 设置为对控制台应用程序的引用,但我不能将本机 DLL 设置为这样的引用。

要在 VS2010 中运行控制台应用程序而不会崩溃,我必须将本机 DLL 复制到 .exe 文件夹。

我有两个问题:

  1. 如何将原生 DLL 添加到 DLL 搜索路径中,这样就不用手动复制了?
  2. 如何才能使每个配置(调试/发布)采用正确的 DLL 版本?

更详细的解决方案 - 感谢Tilak's answer:
以下是更多基于Tilak's reply 的新手友好详情:

  1. 将本机 DLL 作为文件(添加现有文件...)添加到托管控制台项目。
  2. 在项目属性窗格中,将“构建操作”设置为“内容”,将“复制到输出目录”设置为“如果较新则复制”或“始终复制”。
  3. 关闭解决方案或VS2010。
  4. 在文本编辑器中打开托管项目.csproj 文件并找到包含本机DLL 名称的<ItemGroup>(这是我们在步骤1 中添加文件时创建的)。我们将在那里进行一些小的更改:
    1. 对于 Debug 版本,使用 <ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' "> 代替 <ItemGroup> 并输入 Debug DLL 的路径。
    2. 复制 Release 版本的条目,而不是 <ItemGroup> 使用 <ItemGroup Condition="'$(DefineConstants)' != 'DEBUG;TRACE' "> 并输入 Release DLL 的路径。
  5. 保存文件并重新打开 VS2010。依赖项现在应该就位了。

【问题讨论】:

  • 我会将本机 DLL 作为文件放入托管 DLL 中,并将其属性设置为“内容”和“复制到输出目录”。
  • 您能否更具体地说明如何执行此操作(也许改写为答案)?另外,这种方法可以用来区分 Debug 和 Release 版本吗?

标签: c# .net visual-studio-2010 dll console-application


【解决方案1】:

您可以在构建后事件中复制文件,

将文件添加为资源。

如何才能使每个配置(调试/发布)采用正确的 DLL 版本?

您可以在构建后事件中使用$(ConfigurationName) 来找出调试/发布模式。相应地,您可以参考这些库。

如果您使用的是资源方式,您必须修改项目文件以根据 Debug/Release 模式进行复制。查看详情here

【讨论】:

  • 是的,我知道构建后复制选项。我希望避免它,因为它将副本的责任放在本机 DLL 而不是依赖项目上。对于每个新的依赖项目,我必须更改本机 DLL 构建项目配置。
  • 另外,如何将文件添加为依赖于构建的资源?
  • 将 dll 作为文件添加到项目中。将构建操作设置为内容。在喜欢的文本编辑器中编辑项目文件,分别定义调试和发布对应的项目组。类似于为 x86 和 x64 维护不同的属性组。
  • 太好了,效果很好。我会以对新手更友好的方式写出来。
猜你喜欢
  • 2013-07-21
  • 2017-10-03
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多