Der Wiederherstellungspfad muss mit MSBuildProjectExtensionsPath
identisch sein, damit die nugget-generierten Requisiten- und Zieldateien von den gemeinsamen Requisiten und Zielen importiert werden. sowie BaseIntermediateOutputPath
wird der Standard für das Erstellen des Pfads zu ProjectAssetsFile
sein.
Zumindest für die NuGet Importe, ist es wichtig, dass MSBuildProjectExtensionsPath
oder BaseIntermediateOutputPath
gesetzt vor die SDK Requisiten Datei importiert wird.
Die einfachste Möglichkeit, alle diese Probleme zu lösen, ist BaseIntermediateOutputPath
sehr früh im Projekt festzulegen, so dass alle Komponenten ihren Wert als Standardbasispfad annehmen - das ist im Wesentlichen umleiten obj
zu woanders.
Dies steht im Konflikt mit der <Project SDK="...">
Syntax, da es keine Möglichkeit gibt, Eigenschaften vor der Requisite-Datei des SDK festzulegen. Um dies zu umgehen, kann das Projekt wie folgt geändert werden:
<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>
Eine Alternative wäre, eine Directory.Build.props
Datei zu erstellen, die automatisch importiert früh genug werden, aber dies würde den Wert für alle Projekte im Verzeichnis anwenden und wegnehmen die Fähigkeit, den Wert pro Projekt anzugeben.
Sie können den BaseIntermediateOutputPath auf etwas wie '$ (MSBuildThisFileDirectory) artificates \ obj \ $ (MSBuildProjectName)' in Directory.Build.props setzen, um einen eindeutigen Pfad für jedes Projekt zu erhalten (solange Sie keine Projekte mit haben) den gleichen Namen unter verschiedenen Pfaden). –