[英]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.