[英]Why doesn't Exec Command work in a .csproj for netstandard2.0?
[英]Target BeforeBuild doesn't work in csproj
我正在尝试在 .csproj (vs2017) 中使用目标事件“BeforeBuild”,但它不起作用。 有人会知道出了什么问题:
<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 on output。
[]秒
BeforeBuild无法在csproj中工作
那是因为csproj中的Before / AfterTarget被SDK目标文件覆盖 。
如果在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>
来自官方文档:
警告
请务必使用与上一节表中列出的预定义目标不同的名称(例如,我们将自定义构建目标命名为CustomAfterBuild ,而不是 AfterBuild ),因为这些预定义目标被 SDK 导入覆盖,它也定义了它们。 您看不到覆盖这些目标的目标文件的导入,但是当您使用引用 SDK 的 Sdk 属性方法时,它会隐式添加到项目文件的末尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.