始终在Visual Studio 2017中运行生成后事件命令

Boj*_*jan 4 msbuild visual-studio visual-studio-2017

当前,当我运行我的项目时,它将执行我设置的构建后命令。但是,仅当项目进行了更改时,这才是正确的。我的最终目标是在每次构建项目时都运行我的项目。但是,我注意到的是,如果要按角度更改HTML文件,则该项目不会检测到任何更改,因此不会再次生成,因此不会运行ng build命令。

有没有办法强迫它始终运行生成后命令,或者即使没有检测到更改也可以使其始终重建?也许还有另一种方法可以做到这一点?

这是一个.NET Core WebApp,运行我的构建后事件的代码位于我的.csproj文件中

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="echo Building Angular App..." />
    <Exec Command="cd ClientApp &amp;&amp; ng build" />
</Target>
Run Code Online (Sandbox Code Playgroud)

Cal*_*alC 6

你可能稍有不同在.csproj的文件,并设置配置后生成事件RunPostBuildEvent,以Always按下面:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    ...
    <PostBuildEvent>cd ClientApp &amp;&amp; ng build</PostBuildEvent>
    <RunPostBuildEvent>Always</RunPostBuildEvent>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

编辑:正如我在进行更多测试后发现的RunPostBuildEvent那样,它的行为并不像我预期的那样。因此,“解决方法”是DisableFastUpToDateCheck按照以下方式添加:

<PropertyGroup>
  <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
  <PostBuildEvent>cd ClientApp &amp;&amp; ng build</PostBuildEvent>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

MSDN

仅适用于 Visual Studio 的布尔值。Visual Studio 生成管理器使用称为 FastUpToDateCheck 的过程来确定是否必须重新生成项目才能保持最新状态。此过程比使用 MSBuild 确定这一点要快。将该DisableFastUpToDateCheck属性设置 为true允许您绕过 Visual Studio 生成管理器并强制它使用 MSBuild 来确定项目是否是最新的。

显然,这样做的缺点是项目将始终重建,因此这不是理想的解决方案。


Leo*_*SFT 6

有没有办法强迫它始终运行生成后命令,或者即使没有检测到更改也可以使其始终重建?

最简单的方法是在属性设置DisableFastUpToDateCheck为true的项目文件中禁用FastUpToDateCheck的Visual Studio生成经理:

<PropertyGroup>
    <DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

检查有关DisableFastUpToDateCheck的MSDN

一个仅适用于Visual Studio的布尔值。Visual Studio生成管理器使用名为FastUpToDateCheck的过程来确定是否必须重建项目以保持最新。此过程比使用MSBuild确定此过程更快。将DisableFastUpToDateCheck属性设置为true可以使您绕过Visual Studio构建管理器,并强制其使用MSBuild来确定项目是否最新。

此外,如果您想要一种将构建与构建后命令分开的方法,则可以使用MSBuild命令行直接构建该项目,而无需添加上述设置。

希望这可以帮助。


Boj*_*jan 6

我通过将以下属性添加到我的项目文件中解决了这个问题

<RunPostBuildEvent>Always</RunPostBuildEvent> 
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
Run Code Online (Sandbox Code Playgroud)

其他人将此作为答案发布,但由于某种原因被删除,所以我重新发布它,以便将来出现的任何人都可以看到我是如何解决它的。