.NET Core - 覆蓋預設建構目標
我有一個 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>