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

时间:2018-07-08 02:42:42

标签: visual-studio msbuild visual-studio-2017

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

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

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

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Exec Command="echo Building Angular App..." />
    <Exec Command="cd ClientApp &amp;&amp; ng build" />
</Target>

3 个答案:

答案 0 :(得分:4)

  

是否有一种方法可以强制它始终运行生成后命令,或者即使没有检测到更改也可以使其始终重建?

最简单的方法是在项目文件中将属性var query = db.Query("SELECT SUM(UserRating) as 'Sum', AVG(UserRating) as 'Average', COUNT(*) as 'Total' FROM ActivityLogs"); query.FirstOrDefault(); // {{DapperRow, Sum= '3', Average = '3', Total = '1'}} var sum = query[0].Sum; // error!! 设置为true,以禁用DisableFastUpToDateCheck用于Visual Studio构建管理器:

FastUpToDateCheck

检查MSDN关于DisableFastUpToDateCheck:

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

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

希望这会有所帮助。

答案 1 :(得分:3)

您可以在.csproj文件中配置构建后事件的方式稍有不同,然后按照以下说明将RunPostBuildEvent设置为Always

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    ...
    <PostBuildEvent>cd ClientApp &amp;&amp; ng build</PostBuildEvent>
    <RunPostBuildEvent>Always</RunPostBuildEvent>
  </PropertyGroup>

编辑:正如我在进行了更多测试之后发现的那样,RunPostBuildEvent的行为不符合我的预期。因此,一种“解决方法”是按照以下说明添加DisableFastUpToDateCheck

<PropertyGroup>
  <DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>
  <PostBuildEvent>cd ClientApp &amp;&amp; ng build</PostBuildEvent>
</PropertyGroup>

来自MSDN

  

仅适用于Visual Studio的布尔值。 Visual Studio   构建管理器使用名为FastUpToDateCheck的过程来确定   是否必须重建项目以保持最新状态。这个过程是   比使用MSBuild确定速度更快。设置   DisableFastUpToDateCheck的{​​{1}}属性可让您绕过Visual   Studio内部版本管理器,并强制其使用MSBuild来确定是否   该项目是最新的。

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

答案 2 :(得分:1)

我已通过在项目文件中添加以下属性来解决此问题

<RunPostBuildEvent>Always</RunPostBuildEvent> 
<DisableFastUpToDateCheck>true</DisableFastUpToDateCheck>

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

相关问题