在VS 2017中构建目标只调用一次(因为我没有更好的解释)

时间:2018-03-23 16:16:36

标签: msbuild visual-studio-2017

我最近改为Vs 2017并发现了一个与Msbuild的奇怪行为 - 在下面的简单项目文件中," Prebuild"目标只在加载项目时调用一次。在那之后,您可以点击Build按钮以获得永恒,但是" Prebuild"永远不会调用target。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <Target Name="PreBuild" BeforeTargets="PreBuildEvent">
    <Exec Command="echo Test" />
  </Target>
</Project>

对于我用于lex / yacc集成的输入/输出属性的目标也是如此。

知道为什么吗?

1 个答案:

答案 0 :(得分:0)

VS中的项目系统执行&#34;最新检查&#34;尝试通过不调用MSBuild来节省构建时间,如果它不认为影响构建的任何文件已更改。因此,如果您的项目被认为是最新的&#34;,则不会调用任何msbuild目标。 A&#34;重建&#34;但是会清理和建造项目。

如果您需要在最新检查中添加其他输入,则可以使用其他UpToDateCheckInput项目向visual studio发出信号,如果这些文件发生更改,它应该调用MSBuild:

<ItemGroup>
  <UpToDateCheckInput Include="sample.txt" />
  <!-- e.g. if you are transforming markdown files -->
  <UpToDateCheckInput Include="doc/**/*.md" />
</ItemGroup>

<Target Name="PrintSomething" BeforeTargets="BeforeBuild">
  <Message Importance="high" Text="In a before build target" />
</Target>

或者,您可以通过取消选中相应的复选框来禁用选项中.NET Core / Standard项目系统的最新检查:

enter image description here