Visual studio Visual Studio(2008)混合模式项目依赖项。C-sharp项目依赖于C++;dll,但C++;dll没有得到重建

Visual studio Visual Studio(2008)混合模式项目依赖项。C-sharp项目依赖于C++;dll,但C++;dll没有得到重建,visual-studio,build-process,dependencies,Visual Studio,Build Process,Dependencies,我有一个VisualStudio2008解决方案,其中包含两个项目。一个C++ DLL和一个CSARP应用程序。 Csharp应用程序使用[DllImport]访问DLL中的函数,并在DLL上设置了依赖项 由于某些原因,设置依赖项不足以导致VS将DLL复制到应用程序的生成路径。因此,应用程序项目有一个生成后事件,导致DLL被复制。(如果有人知道更干净的方法,请告诉我!) 我遇到的问题是,当我更改DLL代码,然后尝试在调试器中运行Csharp应用程序时,VS2008未能意识到必须重建(并重新复制)

我有一个VisualStudio2008解决方案,其中包含两个项目。一个C++ DLL和一个CSARP应用程序。 Csharp应用程序使用[DllImport]访问DLL中的函数,并在DLL上设置了依赖项

由于某些原因,设置依赖项不足以导致VS将DLL复制到应用程序的生成路径。因此,应用程序项目有一个生成后事件,导致DLL被复制。(如果有人知道更干净的方法,请告诉我!)

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

我必须强制重新构建Csharp应用程序(即通过显式选择build,或通过“触摸”一个.CS文件)

有人知道如何告诉VisualStudio做正确的事情吗

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

我正在使用生成后事件跨多个应用程序复制DLL

问题是,如果您只选择调试应用程序,VisualStudio无法重新编译更改后的C++项目,尽管存在一个依赖关系。


我知道依赖性在起作用,因为如果我选择“构建”(与“调试”相反),C++ DLL就被构建了。

< P> Hmm.。所以我以前没有做过这个精确的事情,但是我只是把一个C++ LIB项目和一个C.Y.WiFrm项目一起扔到了同一个解决方案中。我右键单击了解决方案,选择了属性,然后在公共属性->项目依赖项下,使C++依赖于C++。 当我给C++一个mod时,它会问我是否要重建C++。还有一个“不要问我”复选框

也许我的测试和你的情况不同,但当我这么做的时候,它似乎起了作用


希望对您有所帮助。

假设DLL项目没有在其他解决方案中使用,为什么不将生成后事件放在DLL应用程序项目上,以便始终复制它?

我没有尝试过,但您不能使用生成顺序执行此操作?

生成和调试做不同的事情。在Tools-Options-Projects and Solutions-Build and Run中,有一个复选框“仅在运行时生成启动项目和依赖项”。这是默认选中的。因此,如果VS没有将DLL识别为依赖项,则当您选择“调试”时,它不会构建它


我没有VS to Stand(仅Express),但是您可以尝试添加C++ DLL作为引用而不是依赖项。

我已经遇到了与DLL项目依赖性相关的应用程序相同的问题。在我看来,问题在于VisualStudio只有在必须重新编译应用程序项目中的某些内容时才会启动构建后事件。因此,如果您在不修改应用程序包含的任何头的情况下修改DLL源,则应用程序不会重新编译,因为从它的角度来看,DLL是相同的。由于未重新编译应用程序,因此不会触发生成后事件。因此,应用程序没有过时的DLL。我还没有找到一个解决这个问题的好办法。

如果您尝试调试Csharp应用程序,问题就显而易见了。它没有意识到需要重建DLL。奇怪-我没有看到这种行为。当我单击“运行并在调试模式下运行”时,它注意到DLL需要重建。如果您在DLL中更改代码,并可能设置断点,当您单击“在调试模式下运行”时,您会发现DLL尚未重建-即,断点不会被击中。(或者至少,这是我看到的。)正如在原始问题中提到的,我已经在DLL项目上使用了后期生成事件。它不会被复制,因为visual studio没有正确决定是否需要构建项目。抱歉--手指和大脑已断开连接。。。将生成后事件放在应用程序项目上,以便每次生成时都复制它。是的,对不起,我也是这个意思。问题是,尽管DLL已被更改和重建,但应用程序没有被重建。也就是说,依赖关系足以触发DLL的构建,但不能触发应用程序!再次抱歉,这是一个预构建事件。当然,可以将生成后事件设置为始终执行。我将尝试这个…不,这仍然不起作用:(在调试器(F5)中启动应用程序会触发DLL的重建,但不会触发应用程序,因此生成后事件不会触发,即使它设置为“始终生成”。