【发布时间】:2013-01-08 21:08:33
【问题描述】:
我有 3 个项目的 VS2010 解决方案:
- 本机 (C++) DLL
- 使用本机 DLL 的托管 (C#) DLL
- 使用托管 DLL 的托管 (C#) 控制台应用程序
我可以将托管 DLL 设置为对控制台应用程序的引用,但我不能将本机 DLL 设置为这样的引用。
要在 VS2010 中运行控制台应用程序而不会崩溃,我必须将本机 DLL 复制到 .exe 文件夹。
我有两个问题:
- 如何将原生 DLL 添加到 DLL 搜索路径中,这样就不用手动复制了?
- 如何才能使每个配置(调试/发布)采用正确的 DLL 版本?
更详细的解决方案 - 感谢Tilak's answer:
以下是更多基于Tilak's reply 的新手友好详情:
- 将本机 DLL 作为文件(添加现有文件...)添加到托管控制台项目。
- 在项目属性窗格中,将“构建操作”设置为“内容”,将“复制到输出目录”设置为“如果较新则复制”或“始终复制”。
- 关闭解决方案或VS2010。
- 在文本编辑器中打开托管项目
.csproj文件并找到包含本机DLL 名称的<ItemGroup>(这是我们在步骤1 中添加文件时创建的)。我们将在那里进行一些小的更改:- 对于 Debug 版本,使用
<ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' ">代替<ItemGroup>并输入 Debug DLL 的路径。 - 复制 Release 版本的条目,而不是
<ItemGroup>使用<ItemGroup Condition="'$(DefineConstants)' != 'DEBUG;TRACE' ">并输入 Release DLL 的路径。
- 对于 Debug 版本,使用
- 保存文件并重新打开 VS2010。依赖项现在应该就位了。
【问题讨论】:
-
我会将本机 DLL 作为文件放入托管 DLL 中,并将其属性设置为“内容”和“复制到输出目录”。
-
您能否更具体地说明如何执行此操作(也许改写为答案)?另外,这种方法可以用来区分 Debug 和 Release 版本吗?
标签: c# .net visual-studio-2010 dll console-application