[英]Import .targets file from command line in msbuild
我目前正在使用msbuild構建多個項目。 我對由.targets文件處理的構建進行了一個小的自定義。 一種解決方案是添加代碼段
<Import Project="MyTargets.targets"/>
到每個項目文件。 但是,理想情況下我不想觸摸項目文件,並能夠將此信息作為參數傳遞給msbuild。 這樣我就可以輕松控制是否從命令行運行此自定義, 而且我不必觸摸現有的項目文件。
這可能嗎?
您可以使用MSBuild 4.0輕松完成此操作(通過頂級屬性ToolsVersion =“4.0”檢查您的版本):
在加載Common.targets和/或CSharp.targets之前和之后,可以使用多個屬性來導入目標。
最簡單的方法是使用2組自解釋屬性。 第一套是:$(CustomBeforeMicrosoftCommonTargets)$(CustomAfterMicrosoftCommonTargets)
第二個:
$(CustomBeforeMicrosoftCSharpTargets)
$(CustomAfterMicrosoftCSharpTargets)
屬性名稱非常自我解釋。
只需通過msbuild.exe將完整文件名傳遞給任何此屬性即可
msbuild.exe /p:CustomBeforeMicrosoftCSharpTargets=c:\mytargets\custom.targets
如果需要導入多個文件,可以使用其他“ImportByWildcard(Before | After)....”屬性。 但在這種情況下,您需要將更多參數傳遞給命令行。
從MSBuild 15.0開始,以下兩個文件將自動導入到您的構建中,以防它們在項目路徑或根目錄路徑上的任何父文件夾中找到:
備注:一旦找到道具或目標文件,MSBuild將停止尋找父項。
另請參閱: https : //docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build
假設您有一個名為“Project.msbuild”的項目文件。 您將添加此條件導入:
<Import Project="$(TargetToImport)" Condition="'$(TargetToImport)' != ''" />
然后將要導入的目標文件的名稱作為msbuild屬性傳遞:
msbuild.exe Project.msbuild /p:TargetToImport="TargetFile.Target"
確保使用目標文件的絕對路徑 ,它可以工作。
來源: Sayed Ibrahim Hashimi - MSBuild如何在CoreCompile第2部分之后執行目標 。
msbuild.exe /p:CustomBeforeMicrosoftCSharpTargets="c:\mytargets\custom.targets" /preprocess:out.xml
使用/preprocess[:filepath]
查看導入的結果。
您不必修改任何csproj
或vbproj
文件。
當然,它只適用於您可以設置MSBuild屬性的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.