我最近改为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集成的输入/输出属性的目标也是如此。
知道为什么吗?
答案 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项目系统的最新检查: