8

当项目更改时,如何强制 Visual Studio 2012 重建所有依赖项目?

我有两个项目:一个 C++ DLL 和一个 C# WPF 应用程序。C# 项目有一个构建后命令,用于将 DLL 复制到 Debug 文件夹中。

当我修改 C++ 项目时,DLL 会重新构建,但 C# 项目不会,因此 DLL 不会在 Debug 文件夹中更新。然后我需要清理并重建解决方案,然后才能看到更新的结果。

我想告诉 VS,每当我更新 C++ 项目时,它都应该重新构建 C# 项目(或者至少运行构建后命令)。C# 项目依赖于 C++ 项目,但不通过引用。

4

3 回答 3

5

为了详细说明彼得的答案,这就是我所做的。

在解决方案资源管理器中右键单击 C# 项目,然后选择添加 > 现有项。

浏览到 C++ 输出文件夹,选择 DLL 文件,而不是使用添加按钮打开它,而是单击它旁边的下拉按钮,然后选择添加为链接。

我最初做的下一步是右键单击添加到 C# 项目的链接,然后选择属性,然后将复制到输出目录更改为复制(如果更新)。但后来我意识到这将复制调试版本(因为那是链接指向的位置),而不是当前配置。所以我把它留在了不要复制,因为我的命令行会自动选择正确的配置。

所以现在 C# 项目有一个指向 C++ 项目输出的链接,只要 C++ 项目发生更改,它就会触发重新构建,即使该链接与项目的输出无关。

作为记录,这是我在 C# 项目中的构建后命令行(foobar 是 C++ DLL)。

copy "$(SolutionDir)\$(Configuration)\foobar.dll" "$(TargetDir)"
于 2012-09-29T13:18:11.987 回答
3

如果在您的解决方案中设置项目依赖项没有帮助,只是尝试将 C++ 项目中的 .dll 作为链接包含到另一个项目中,那么它应该识别出文件已更改并应该重新构建项目。

于 2012-09-28T13:29:34.730 回答
0

将以下代码插入到每个依赖项目中:

<ItemGroup>
    <None Include="$(MSBuildProjectDirectory)\Properties\Build\_buildforcer">
        <Visible>true</Visible>
    </None>
</ItemGroup>
<Target Name="ForceNextBuild"
        AfterTargets="PrepareForRun"
        Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">

    <Touch Files="$(MSBuildProjectDirectory)\Properties\Build\_buildforcer"
           AlwaysCreate="true"/>
</Target>

如果需要,您可以通过 an 来执行此操作Import。这迫使项目始终构建,而不仅仅是当它依赖的项目发生变化时。

但是,嘿,那些依赖项目通常是应用程序项目,它们通常是业务库之上的瘦包装器。此外,编译不会以这种方式强制执行。它只是MSBuild执行所有目标,只是为了发现一切都是最新的。因此,您的F5性能不会大幅下降。

我已将该None项目明确标记为Visible,因为该项目必须是可见的,此机制才能工作。在相关说明中,您可能必须在进行上述更改后重新加载您的解决方案。

于 2016-06-30T06:51:07.127 回答