Dot-Net

如何呼叫重寫的 MSBuild 目標

  • February 8, 2022

在 MSBuild 中,您可以覆蓋<Target />您自己的另一個文件中的 a。例如,文件中包含的AfterBuild目標Microsoft.Common.targets只需定義您自己的具有相同名稱的目標:

<Target Name="AfterBuild">
   <!-- Do something different -->
</TargetName>

你會看到這樣的註釋:

使用項目“XXXXX”中的目標“AfterBuild”覆蓋項目“C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets”中的目標“AfterBuild”。

有沒有辦法呼叫原來的 AfterBuild 目標?

我想這樣做以檢測某些複雜的預設目標,然後執行原始行為。許多像 Build 這樣的目標都公開了一個可以用於此的 BuildDependsOn 屬性。許多其他人沒有 - 我想在不完全複製其內容的情況下覆蓋它們。

處理 MSBuild 腳本時,它還將處理導入的文件。結果將是整個腳本在記憶體中的單一規範表示。當遇到已經存在的目標時,先前的定義將被丟棄,因此無法呼叫原始目標。

我想這樣做以檢測某些複雜的預設目標,然後執行原始行為。許多像 Build 這樣的目標都公開了一個可以用於此的 BuildDependsOn 屬性。許多其他人沒有 - 我想在不完全複製其內容的情況下覆蓋它們。

如果您想先在目標上執行自定義的東西,然後再執行原始目標,為什麼不直接使用BeforeTargets

所以而不是

<Target Name="AfterBuild">
   <!-- custom AfterBuild overriding default AfterBuild -->
</TargetName>

只需使用

<Target Name="JustBefore_AfterBuild" BeforeTargets="AfterBuild">
   <!-- custom AfterBuild just before default AfterBuild -->
</TargetName>

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