【发布时间】:2015-08-28 00:37:16
【问题描述】:
我在 C++ 中创建了一个 *.dll 文件以用于 C# 程序。本机 DLL 驻留在我的托管 DLL 包装器中。从那里,我将我的本地 DLL(用于调试和发布的 NativeDll.dll)物理复制到我的 C# 控制台应用程序的调试和发布文件夹中。当我运行 C# 程序时,它会按预期运行,创建对象并显示值。
当我更改本机库 (C++) 中变量的默认值时,问题就出现了。当我再次运行程序时,对变量的更改(框的 with)仍然保留最后一个值。根据我的搜索,我发现我可以通过这种方式在项目的构建事件/构建后事件命令行中将 dll 从一个项目复制到我的 C# 项目中:
copy "$(SolutionDir)ManagedDll\bin\$(Configuration)\NativeDll.dll"
"$(SolutionDir)TestDLLConsole\bin\$(Configuration)"
当我再次运行该程序时,我收到一条错误消息,指出 “退出,代码为 9009。” 解决此问题的唯一方法是手动重新复制我的 NativeDll.dll 文件,并在我进行更改时覆盖现有的文件。
我的解决方案中的 4 个项目是下一个版本,具体取决于上一个:
- NativeLib(静态库)
- NativeDll
- ManagedDll
- TestDLLConsole(我在这里测试 dll 是否工作)。
如何将 Dll 复制到/覆盖每个编译的 TestDLLConsole?
【问题讨论】:
-
您永远不应该将 dll 从一个项目复制到另一个项目。您失去了调试功能,因为 dll 不再连接到源数据。相反,当从解决方案资源管理器将一个项目添加到另一个时:添加现有项目,然后浏览到 dll 所在的位置。
-
@jdweng 是的,我明白这一点。我必须首先这样做,以确保项目有效。以上所有项目都是在一个解决方案中创建的。我想要实现的是每次程序重新编译时这些文件都会被覆盖。