簡體   English   中英

目標 BeforeBuild 在 csproj 中不起作用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM