繁体   English   中英

强制Visual Studio重建依赖项目

[英]Force Visual Studio to rebuild dependent projects

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

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

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

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

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

右键单击Solution Explorer中的C#项目,然后选择Add> Existing Item。

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

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

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

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

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

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

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

<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 ,因为该项目必须可见才能使此机制起作用。 在相关说明中,您可能必须在进行上述更改后重新加载解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM