我试图使用目标事件" BeforeBuild"在.csproj(vs2017),但它不起作用。有人会知道出了什么问题:
<Project DefaultTargets="BeforeBuild" Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<Target Name="BeforeBuild">
<Message Text="Test123"></Message>
</Target>
</Project>
预期结果是一条消息:输出上的Test123。
[]中
答案 0 :(得分:6)
BeforeBuild不能在csproj中工作
因为 csproj中的Before / AfterTarget被SDKs目标文件覆盖。
如果您在Project元素上使用新的Sdk属性,则无法在默认的.targets导入后放置目标定义。这可能会导致人们意外放入项目文件中的目标无法运行,除非您检查日志文件并查看目标已被覆盖的消息,否则无法指示原因。
dsplaisted已针对此问题提交了Microsoft/msbuild#1680。作为解决方法,您可以执行以下操作:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
<PreBuildEvent />
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
<Target Name="BeforeBuild">
<Message Text="Test123"></Message>
</Target>
或者:
<Target Name="test" BeforeTargets="Build">
<Message Text="Test123" />
</Target>