强制Visual Studio重建依赖项目

时间:2012-09-28 13:22:32

标签: c# c++ visual-studio visual-studio-2012 projects-and-solutions

如何在项目更改时强制Visual Studio 2012重建所有相关项目?

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

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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

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

所以现在C#项目有一个指向C ++项目输出的链接,它会在C ++项目发生变化时触发重建,即使该链接与项目的输出无关。

对于记录,这是我在C#项目中的post-build命令行(foobar是C ++ DLL)。

copy "$(SolutionDir)\$(Configuration)\foobar.dll" "$(TargetDir)"

答案 1 :(得分:3)

如果在解决方案中设置项目依赖项无助于尝试将来自C ++项目的.dll作为链接包含到另一个项目中,那么它应该认识到文件已更改并应重建项目。

答案 2 :(得分: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>

如果您愿意,可以通过Import执行此操作。 这会强制项目始终构建,而不仅仅是在项目依赖于更改时。

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

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