2

我有一个包含两个项目的 Visual Studio 2008 解决方案。一个 C++ DLL 和一个 Csharp 应用程序。

Csharp 应用程序使用 [DllImport] 访问 DLL 中的函数,并在 DLL 上设置了依赖项。

出于某种原因,设置依赖项不足以导致 VS 将 DLL 复制到应用程序的构建路径。因此,应用程序项目有一个构建后事件,该事件会导致 DLL 被复制。(如果有人知道更清洁的方法,请告诉我!)

我遇到的问题是,当我对 DLL 代码进行更改,然后尝试在调试器中运行 Csharp 应用程序时,VS2008 无法意识到必须重新构建(并重新复制)DLL。

我必须强制重新构建 Csharp 应用程序(即通过明确选择构建,或通过“触摸”.CS 文件)。

有谁知道如何告诉 Visual Studio 做正确的事?

编辑:我正在使用项目依赖项。他们工作不正常。

正在使用构建后事件来复制 DLL。

问题在于,如果您只是选择调试应用程序,Visual Studio将无法重新编译更改后的 C++ 项目,尽管事实上存在依赖项

我知道依赖项正在工作,因为如果我选择“构建”(而不是“调试”),就会构建 C++ DLL。

4

5 回答 5

1

“构建”和“调试”做不同的事情。在工具 - 选项 - 项目和解决方案 - 构建和运行中,有一个复选框“仅在运行时构建启动项目和依赖项”。这是默认选中的。因此,如果 VS 没有将 DLL 识别为依赖项,则在您选择“调试”时它不会构建它。

我手头没有 VS(只有 Express),但您可以尝试将 C++ DLL 添加为引用而不是依赖项。

于 2008-11-06T14:09:48.790 回答
0

我没试过,但你不能用构建顺序来做吗?

于 2008-11-06T12:38:41.297 回答
0

嗯......所以我以前没有做过这个确切的事情,但我只是在同一个解决方案中将一个 C++ lib 项目和一个 C# winform 项目放在一起。我右键单击该解决方案,选择“属性”,然后在“通用属性”->“项目依赖项”下,使 C# 依赖于 C++。

当我为 C++ 制作一个 mod 时,它会问我是否要重建 C++ 的。还有一个“不要问我”复选框。

也许我的测试与您的情况不同,但是当我这样做时它似乎起作用了。

希望这是一些帮助。

于 2008-10-24T17:37:28.033 回答
0

假设 DLL 项目没有在另一个解决方案中使用,为什么不将构建后事件放在DLL应用程序项目上,所以它总是被复制?

于 2008-10-24T17:41:43.047 回答
0

对于具有 DLL 项目依赖项的应用程序,我也遇到过同样的问题。在我看来,问题在于 Visual Studio 仅在必须重新编译应用程序项目中的某些内容时才启动构建后事件。因此,如果您修改 DLL 源而不修改应用程序包含的任何头文件,则不会重新编译应用程序,因为从它的角度来看,DLL 是相同的。由于未重新编译应用程序,因此不会触发构建后事件。因此,应用程序留下了过时的 DLL。我还没有想出一个很好的解决这个问题的方法。

于 2008-11-12T17:32:04.933 回答