2016-04-19 7 views
0

Ich arbeite an einer nuget-Migration, um ein gemeinsames Paketverzeichnis für alle Lösungen zu erstellen. Ich schrieb ein Skript, um NuGet-Konfigurationsdateien, Zieldateien, Hinweispfade (dies sollte bei der automatischen Paketwiederherstellung von NuGet nicht benötigt werden) und ein paar andere Dinge in den Projekt- und Lösungsdateien zu entfernen. Ich habe jetzt eine NuGet-Konfigurationsdatei.Problem Automatisches Wiederherstellen von Nuget-Paketen Xunit und Newtonsoft.Json

Die Migration funktionierte zum größten Teil wie erwartet. Allerdings stieß ich auf Probleme mit Xunit und Newtonsoft.Json-Paketen. Beispielsweise konnten einige Projekte das Xunit-Paket nicht finden, und Visual Studio zeigte den folgenden Fehler: "Der Typ oder Namespace 'Xunit' konnte nicht gefunden werden (fehlt Ihnen eine Assemblyreferenz?") Die einzige Möglichkeit, dies zu beheben, war das xUnit Paket, indem Sie den folgenden Befehl neu zu installieren:

Update-Package –reinstall xunit 

, wenn ich die xUnit Hinweis Pfade hinzugefügt in den Projektdateien wurden neu installiert zurück und der folgende Code wurde die app.config-Datei hinzugefügt:

<dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> 
</dependentAssembly> 

Meine Frage ist, warum brauche ich die Hinweispfade und einige dieser anderen Sachen nur für die Pakete xunit und Newtonsoft.json? Gibt es einen Weg, dies ohne sie zu beheben? Genau dies versuche ich mit dieser Migration zu vermeiden.

Antwort

1

Wenn Sie eine packages.config-Datei verwenden, benötigen Sie die Hinweispfade, damit MSBuild Assemblys auflösen kann. xunit und JSON.NET werden nicht im GAC installiert, also ohne die Hinweispfade oder einen anderen Mechanismus, z. B. einen für das Projekt konfigurierten Referenzpfad, kann der Build die Assemblys nicht finden. Auch wenn Sie die NuGet-Pakete aktualisieren, werden die Hinweispfade wieder zur Projektdatei hinzugefügt.

Ein ähnliches Problem wird für alle benutzerdefinierte MSBuild .targets-Dateien auftreten, die verwandt werden. Wenn Sie sie aus dem Projekt entfernen, kann MSBuild sie nicht finden.

NuGet restore lädt nur die Pakete und extrahiert sie in das Paketverzeichnis. Es wird die Projektdateien nicht ändern.

Wenn Sie die Verwendung von Hinweispfaden vermeiden möchten, sollten Sie die Datei project.json anstelle der Datei packages.config verwenden. Wenn Sie eine project.json-Datei verwenden, werden die Assemblys zur Erstellung mit einer NuGet-Zieldatei aufgelöst, ohne dass die Referenzen oder Hinweispfade in Ihrer Projektdatei (.csproj) vorhanden sein müssen.