So erstellen Sie ein nuget-Paket mit beiden release-und debug-dll ' s mit nuget package explorer?
Ich bin mit dem Nuget Package Explorer um einige nuget-Pakete. Ich habe es geschafft, so zu tun bauen ein Projekt im Release-Modus in VS und das hinzufügen sowohl der dll-und pdb-Dateien in das Paket.
So weit So gut, aber wenn ich das Paket hinzufügen, um ein weiteres Projekt, und versuchen Sie, den Schritt in den code während des Debuggens, es wird Schritt für Schritt über Sie statt.
Ich verstehe, dass ich brauchen, um zu bauen, und fügen Sie die Debug-dll-und pdb-mit meinem Paket, wenn ich will, um den Schritt in den code während des Debuggens. Ich bin mir nicht sicher, obwohl, wie diese auf das Paket, das ich bereits erstellen, die enthält bereits die Release-dll-und pdb-Datei, die den gleichen Namen tragen.
Irgendwelche Gedanken?
- Ich habe die .pdb-Datei (wie schon in stackoverflow.com/a/34949792/825588), und baute mein nuget-Paket mit
-Prop Configuration=Release
. Ich bin in der Lage, step-in dieser code mit einigen Problemen. Diese Antwort bestätigt auch, dass das debugging gegen ein Release-dll, für die Sie einen .pdb-Datei ist möglich: stackoverflow.com/a/5457250/825588
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Gedanken sind, NuGet-Verpackung ist viel über Konventionen.
Ist es kein problem, in der Verpackung gleichen namespaces und gleiche Namen für verschiedenen Plattformen (wie in
lib/net40/mydll.dll
,lib/net35/mydll.dll
etc im gleichen Paket), als NuGet-filter registriert Abhängigkeiten von der Plattform ab.Gebäude mehrere Versionen für die gleiche Plattform scheint unkonventionelle, diese Diskussion parteiisch ist auf die Herstellung von einem Paket pro bauen. Das bedeutet nicht, dass Sie es nicht können, aber man sollte vorher Fragen, wenn Sie sollten.
Sagte, dass, wenn Ihr debug-und release-builds sind sehr unterschiedlich (bedingtes kompilieren etc) könnte dies nützlich, wenn. Aber wie wird die end-Benutzer wählen, Release-oder Debug-bei der Installation der Paket?
Eine Idee könnte sein, eine version pro build-Konfiguration. Beides kann installiert werden in das Projekt. Das zu tun, fügen Sie entweder eine targets-Datei für Ihr Paket oder bauen
ein powershell-Skript installieren(nicht da Nuget-v3), fügt die bedingte Referenzen direkt in das target-Projekt-Datei, wenn Sie wollen etwas weniger basic-als was auch immer MsBuild für Sie tun können.Beispiel für die erste Taktik: Erstellen Sie eine .Ziel-Datei (in deinem Paket, erstellen Sie eine
build
Ordner und erstellen Sie dannbuild\YourLib.targets
mit folgendem Inhalt):Bietet Ihnen erstellten debug-und release-Ordner (Ordner platform ist optional), die build-Ausgabe zu verändern-je nach Konfiguration - sofern packet Verbraucher haben konventionelle Konfiguration Namen, aber man konnte immer verlängern den Zustand logisch ein bisschen mit $(Configuration).Enthält etc oder einfach nur, dass in dem Paket readme
Inspiriert von @Tewr die ich gefunden habe, eine umständliche, aber funktionierende Lösung.
Erstellen Sie ein nuget mit der folgenden Dateistruktur:
Targets-Datei Inhalt:
Dlls in lib Ordner werden automatisch Hinzugefügt, wie die Referenzen der Erstellung der folgenden in der Projekt-Datei:
Sobald Sie erstellen Sie das Projekt zum ersten mal, wird das Ziel kopieren Sie die release und debug version von tools\Version und tools\debug Ordner lib\net\release und lib\net\debug Ordner. Am Ende, es wird löschen die lib\net\$(Configuration) Ordner
Genießen (oder auch nicht - ich persönlich mag nicht die Lösung).
Dank @Tewr In new nuget format und sdk Stil csproj-format, wir können einige Konstanten wie
$(MSBuildThisFileDirectory)
um die aktuelle Datei-Pfad.Den code mit der version Wartung erhöhen die Schwierigkeit. Die sdk Stil csproj-format verwenden Sie das neue Paket-format, das wird nicht die Ausgabe der Paket-Datei-Paket-Ordner.
Können wir die Ziele-Datei erstellen", und verwenden Sie
$(MSBuildThisFileDirectory)
um den Pfad der Datei.Sehen die Datei