2017-04-25 1 views
0

Ich habe ein nugget-Paket, das von mehreren anderen abhängt (z. B. Newtonsoft.Json). Paket ist nicht verwenden, wie eine Klassenbibliothek soll es nur benutzerdefinierte MSBuild Aktion fügt so die Struktur des Pakets so aussieht:Referenzieren von nuget-Paketen aus dem nugget-Paket

-package CustomBuildAction 
|-lib/net45/CustomBuildAction.dll 
|-build/CustomBuildAction.targets 

Wenn ich das Paket CustomBuildAction.targets installieren richtig referensed von csproj aber wenn ich bin versuchen, Build auszuführen, bekomme ich einen Fehler, der:

Die "CustomBuildAction" Task konnte nicht aus Assembly "Pfad zu dll/CustomBuildAction.dll" geladen werden. Die Datei oder Assembly 'Newtonsoft.Json.dll, Version = ...' oder eine ihrer Abhängigkeiten konnte nicht geladen werden.

Ich habe Newtonsoft.Json.dll in Nuspec-Datei als eine Paketabhängigkeit enthalten, Nugget zeigt es als eine Abhängigkeit, aber MSBuild kann es nicht auflösen. Für mich ist es wie das Problem aussieht, ist, dass ich CustomBuildAction.dll aus .targets-Datei mit relativem Pfad bin Referenzierung (relative Ordner zu bauen) in Paketen Ordnern, dh:

../lib/net45/CustomBuildAction.dll 

Aber diese DLL ist nicht platziert werden soll in den Build-Output-Ordner, wo es alle seine Abhängigkeiten finden könnte. Wie kann ich dieses Problem beheben? Sollte ich Abhängigkeiten direkt in das Paket aufnehmen oder gibt es eine andere Möglichkeit, es zu lösen?

+0

Muss das Projekt auf die CustomBuildAction.dll verweisen, wenn es nur von der benutzerdefinierten MSBuild-Aktion verwandt wird? Ich würde es einfach im Build-Verzeichnis neben der .targets-Datei haben und dann von dort importieren. Dann haben Sie die Newtonsoft.Json.dll im Build-Verzeichnis zu. –

+0

@Matt Ward nein, es ist nicht notwendig, es als Referenz in das Projekt einzufügen. Wird versuchen, dll in Build-Ordner zu verschieben, interessante Idee – Leo

Antwort

0

MSBuild löst Aufgabenabhängigkeiten aus dem Ordner, der die Taskassembly enthält. Leider bedeutet dies, dass Sie Newtonsoft.Json.dll in Ihrem NuGet-Paket neben Ihrer CustomBuildAction.dll-Datei enthalten müssen.

Um zu verhindern, dass die Assemblies in der Build-Ausgabe enden, fügen Sie die Assemblys in einen anderen Ordner im Paket ein. Zum Beispiel, Werkzeuge/solange es nicht in lib ist, wird es nicht als eine Assembly behandelt, die als Referenz zur Verfügung steht.

Verwandte Themen