我有 3 个项目的 VS2010 解决方案:
- 本机 (C++) DLL
- 使用本机 DLL 的托管 (C#) DLL
- 使用托管 DLL 的托管 (C#) 控制台应用程序
我可以将托管 DLL 设置为对控制台应用程序的引用,但我不能将本机 DLL 设置为这样的引用。
要在 VS2010 中运行控制台应用程序而不会崩溃,我必须将本机 DLL 复制到 .exe 文件夹。
我有两个问题:
- 如何将本机 DLL 添加到 DLL 搜索路径中,这样我就不必手动复制了?
- 我怎样才能做到这一点,以便每个配置(调试/发布)采用正确的 DLL 版本?
更详细的解决方案- 由于Tilak 的回答:
以下是基于Tilak 的回复的更多新手友好细节:
- 将本机 DLL 作为文件(添加现有文件...)添加到托管控制台项目。
- 在项目属性窗格中,将“Build Action”设置为“Content”,将“Copy to Output Directory”设置为“Copy if newer”或“Copy always”。
- 关闭解决方案或VS2010。
.csproj
在文本编辑器中打开托管项目文件,找到<ItemGroup>
包含本机 DLL 名称的文件(这是我们在步骤 1 中添加文件时创建的)。我们将在那里进行一些小的更改:- 对于 Debug 构建,而不是
<ItemGroup>
使用<ItemGroup Condition="'$(DefineConstants)' == 'DEBUG;TRACE' ">
并输入Debug DLL 的路径。 - 复制 Release 构建的条目,而不是
<ItemGroup>
使用<ItemGroup Condition="'$(DefineConstants)' != 'DEBUG;TRACE' ">
并输入Release DLL 的路径。
- 对于 Debug 构建,而不是
- 保存文件并重新打开 VS2010。依赖关系现在应该到位。