Asp.net-Core

.NET Core - 覆蓋預設建構目標

  • December 3, 2017

我有一個 Angular 項目,我想將它包含在我的 Visual Studio 解決方案中。我添加了一個類型為 ASP.NET Core 2/Empty 的新項目,其中包含所有文件,不包括 node_modules 和直接在 csproj 中通過萬用字元的類似文件。

我遇到的問題是覆蓋預設建構目標 - 當觸發建構目標時,我想呼叫“ng build”,但這不會發生。可以在此處此處找到有關此的一些材料

1 嘗試覆蓋預設建構目標:

<Target Name="Build">
   <Message Importance="high" Text="Overriding default build" />
</Target>

但它仍然沒有執行。

2 試圖指定 DefaultTargets,但它並沒有被同樣地呼叫:

<Project DefaultTargets="NgBuild" Sdk="Microsoft.NET.Sdk.Web">
  ...
<Target Name="NgBuild">
   <Message Importance="high" Text="Overriding default build" />
</Target>

只有在我添加屬性之後BeforeTargets="Build",消息才在那裡。

所以問題是 - 我如何覆蓋預設的建構行為?最終,我希望有一個可以<Exec Command="ng build">在其中呼叫的目標,並且不會在項目中生成.exe並且不需要任何 .cs 文件。

不覆蓋目標的原因Build是因為在載入自定義目標時尚未定義它 - 您的自定義目標被預設目標覆蓋。

如果您使用基於 SDK 的項目文件 using <Project Sdk="…">,則會在項目文件之前和之後自動導入 SDK 道具和目標文件(只有兩個 msbuild 項目文件)。Build目標實際上是通過項目內容之後的導入定義的,因此會覆蓋您在項目文件中定義的目標。

如果您真的想覆蓋Build目標(稍後會詳細介紹),我建議您從隱式 SDK 導入轉移到顯式 SDK 導入:

<Project>
 <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk.Web" />
 <!-- Project content -->
 <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.Web" />
 <Target Name="Build">
   <!-- this will override the default Build target. -->
 </Target>
</Project>

但是,SDK 是圍繞編譯和生成 .NET 程序集而建構的。您可能會發現覆蓋Build目標可能會導致意外結果,包括您的項目無法生成其他項目可以引用的輸出(如果您願意的話)。

如果您只是想在項目中添加一個建構步驟,我建議您添加一個自定義目標來掛鉤到現有的建構過程:

<Target Name="NgBuild" BeforeTargets="BeforeBuild">
 <Exec Command="ng build" />
</Target>

引用自:https://stackoverflow.com/questions/47179705