2017-05-05 25 views
0

使用新的SDK風格csproj格式時,可以使用<targetframeworks>元素作爲目標框架的分號分隔列表來構建項目。當使用OutDir時,每個目標框架的子文件夾中的MSBuild輸出

這導致生成輸出文件夾每個目標架構的一個子文件夾:

build output folder structure

然而,路過的MSBuild命令行上OUTDIR屬性時,它不會創建子文件夾,並內置程序集都放在同一個文件夾中。

命令行工作,但不允許輸出位置:

msbuild projectfile.csproj

是選擇輸出目錄,但地方建在同一個文件夾組件(有效覆蓋是內置目標框架組件

命令行在前):

msbuild projectfile.csproj /p:OutDir=buildtemp

有什麼辦法放置在非默認的文件夾中生成輸出,同時仍保持targetframwork子文件夾?

回答

0

現在使用的屬性是OutputPath,但是通過CLI進行設置會使其成爲全局屬性並覆蓋輸出路徑的自動附加。解決方法是創建一個全局中間屬性並從項目中使用它。

給你的項目文件添加PropertyGroup內:

[email protected]:~/tmp$ dotnet build /p:BaseOutputPath=bin/foo 

    tmp -> /Users/martin.ullrich/tmp/bin/foo/netstandard1.4/tmp.dll 
    tmp -> /Users/martin.ullrich/tmp/bin/foo/netstandard1.6/tmp.dll 

這裏的問題是,SDK會嘗試:

<OutputPath>$(BaseOutputPath)</OutputPath> 

然後,你可以調用編譯命令時,全局設置該屬性根據TargetFrameworkAppendTargetFrameworkToOutputPath更改OutputPath屬性。但是,如果通過CLI指定值,則項目邏輯無法覆蓋它。

還要注意的是BaseOutputPath在SDK默認值(默認爲bin\)實際使用,但它會嘗試在默認情況追加配置名稱..

相關問題