Ich möchte ein lokales / internes NuGet-Repository ausführen . Ich glaube, ich habe herausgefunden, wie vorhandene NuGet-Pakete "wiederverwendet" werden können, indem ich sie mit NuGet in ein Dummy-Projekt aufgenommen und die Paketdatei gescannt habe, um meine lokal zwischengespeicherten .nupkg
Dateien abzurufen , aber ...
Wie erstellt man .nupkg
aus einem Projekt ein Nuget-Paket ( ), das automatisch alle dll
Abhängigkeiten enthält und nicht nur die über NuGet erfassten?
Speziell:
- Erstellen Sie eine Lösung
- Fügen Sie ein neues Projekt hinzu
- Verweise auf verschiedene
.dll
Dateien / andere Projekte hinzufügen <- dies ist der fehlende Teil - Fügen Sie NuGet-Pakete über den Paketmanager / cmdline / Whatever hinzu
- etwas schafft automatisch die
.nupkg
Nach allem, was ich gefunden habe, solltest du Dinge wie tun
- Bearbeiten Sie Ihre
.csproj
Datei manuell,<BuildPackage>true</BuildPackage>
um Abhängigkeiten hinzuzufügen - Erstellen Sie manuell eine
.nuspec
Datei und listen Sie Ihre Abhängigkeiten manuell auf ( ähnlich? ) - Führen Sie
nuget pack
Ihre.nuspec
Datei manuell aus
Aber alles ist manuell, was dumm ist. Sogar die halbautomatischen Lösungen sind immer noch umständlich oder halb manuell:
.nuspec
Vorlagen erstellen - scheint keine Abhängigkeiten zu enthalten, sondern nur MetadatenNuget Pack über Build-Event (Schritt 5), das Sie manuell zu jedem Projekt hinzufügen müssen, und es hat seine eigenen Macken :
"$(SolutionDir).nuget\NuGet.exe" pack "$(ProjectPath)" -Properties Configuration=Release move /Y *.nupkg "$(TargetDir)"
Ich werde mich mit etwas zufrieden geben, das automatisch ein .nuspec
Manifest aus Projektreferenzen erstellt. Dann kann theoretisch + das Nuget-Build-Ereignis in ein Build-Projekt / Nuget-Paket zusammengefasst werden, was ich wirklich sehen möchte.
Antworten:
Ihr Punkt 3 ( Verweise auf verschiedene DLL-Dateien / andere Projekte hinzufügen <- dies ist der fehlende Teil ) enthält zwei verschiedene Probleme: (1) Verweise auf verschiedene DLL-Dateien hinzufügen und (2) Verweise auf andere Projekte in hinzufügen die gleiche Lösung.
Nummer (2) hier hat seit NuGet 2.5 zusätzliche Unterstützung erhalten . Sie können eine Option hinzufügen, um beim Erstellen eines NuGet-Pakets für ein Projekt Verweise auf andere Projekte in dieselbe Lösung aufzunehmen:
Wenn
projectfile.csproj
auf andere Projekte in Ihrer Lösung verwiesen wird, die ebenfalls als NuGet-Pakete verfügbar gemacht werden, werden die NuGet-Pakete dieser Projekte als Abhängigkeiten hinzugefügt. Wenn auf Projekte in Ihrer Lösung verwiesen wird , die sich nicht als NuGet-Pakete verfügbar machen, werden deren DLLs in dieses NuGet-Paket aufgenommen.Wenn Sie häufig feststellen, dass Sie Ihren Projekten häufig DLLs hinzufügen, die nicht als NuGet-Pakete verfügbar sind, können Sie mit diesen Dateien einfach Ihre eigenen (internen) NuGet-Pakete erstellen. Wenn Sie diese DLLs dann als NuGet-Paket anstelle der Dateien direkt hinzufügen, ist dieses NuGet-Paket eine Abhängigkeit vom NuGet-Paket Ihres Projekts.
quelle
.nuspec
, was ich denke, ist das, was Sie vorschlagen?nuspec
erstellen, die alles imbin
Verzeichnis enthält (unter der Annahme meiner Referenzen) sind alle "lokal kopieren"), wird automatisch alles aufgenommen, was ich hinzugefügt habe. Scheint ein wenig hamfisted, würde aber wahrscheinlich funktionieren.<file src="bin\release\*.dll" target="lib" />
Für andere Googler können Sie dies verwenden, wenn Sie die Datei NuGet.targets zum Ausführen von NuGet Pack verwenden:
quelle
Schau dir das an!
Die Lösung, die ich gefunden habe, ist eine Erweiterung für Visual Studio: https://visualstudiogallery.msdn.microsoft.com/fbe9b9b8-34ae-47b5-a751-cb71a16f7e96/view/Reviews
Sie fügen einfach ein neues Projekt mit dem Namen Nuget Package NuGet Package hinzu
Dann fügen Sie interessante Projekte zu Referenzen und BOOOM hinzu !! Alle Abhängigkeiten und Dateiverzeichnisse werden automatisch hinzugefügt. Wenn Sie NuSpec-Daten ändern möchten, klicken Sie direkt auf das Projekt und gehen Sie zu Eigenschaften. Ändern Sie dann die gewünschten Daten. Generiertes NuSpec und nupkg befinden sich im Ordner obj Ihres neuen Projekts. Ich hoffe, es hilft ;).
quelle
Ich habe einen gut geschriebenen Artikel zu diesem Thema gefunden. Ich habe das gleiche Problem mit bestimmten Paketen, die eine Hierarchie von Abhängigkeiten haben, und bis jetzt habe ich jedes als separates NuGet-Paket hochgeladen (was für eine Zeitverschwendung).
Ich habe gerade die hier gefundene Lösung getestet: https://dev.to/wabbbit/include-both-nuget-package-references-and-project-reference-dll-using-dotnet-pack-2d8p
Nach Prüfung des NuGet-Pakets mit dem NuGet Package Explorer sind die DLLs vorhanden, die von Projekten erstellt werden, auf die verwiesen wird. Ich werde testen, indem ich dieses Paket tatsächlich an NuGet sende und es teste.
Hier ist meine Quelle für den Fall, dass sie für Sie hilfreich ist: https://github.com/jchristn/NuGetPackTest
Und das Test-NuGet-Paket: https://www.nuget.org/packages/NuGetPackTest/1.0.0
Die Lösung scheint gut zu funktionieren. Ich weiß nicht, wie es aussehen wird, wenn es Schichten von Referenzen gibt. Ich bin sicher, es könnte sehr haarig und sehr schnell werden.
.csproj aus der NuGetPackTest-Bibliothek, die auf das Projekt TestLibrary verweist (Teile wurden der Kürze halber entfernt)
quelle