還原輸出路徑需要與MSBuildProjectExtensionsPath
相同,以便nuget生成的道具和目標文件將由共同的道具和目標導入。以及BaseIntermediateOutputPath
將成爲組成ProjectAssetsFile
的路徑的默認值。
至少對於NuGet的進口,重要的是MSBuildProjectExtensionsPath
或BaseIntermediateOutputPath
設置爲之前 SDK道具文件被導入。
解決所有這些問題的最簡單方法是在項目的早期階段設置BaseIntermediateOutputPath
,以便所有組件都將其值作爲默認基本路徑 - 這實質上是將obj
重定向到其他位置。
由於無法在SDK的props文件之前設置屬性,因此與<Project SDK="...">
語法衝突。要解決這個問題,該項目可以改變這樣的:
<Project>
<!-- This needs to be set before Sdk.props -->
<PropertyGroup>
<BaseIntermediateOutputPath>obj\SomeSubDir\</BaseIntermediateOutputPath>
</PropertyGroup>
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<!-- other content -->
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>
另一種方法是創建一個Directory.Build.props
文件,該文件會被自動導入足夠早,但這將值適用於所有項目在目錄中,拿走指定每個項目價值的能力。
您可以將BaseIntermediateOutputPath設置爲類似於Directory.Build.props中的$(MSBuildThisFileDirectory)構件\ obj \ $(MSBuildProjectName)'以獲取每個項目的唯一路徑(只要您沒有項目不同路徑下的相同名稱)。 –