2016-06-07 21 views
8

Ich verwende den Nuget-Paket-Explorer, um einige Nugget-Pakete zu erstellen. Ich habe es geschafft, einfach ein Projekt im Release-Modus in VS zu erstellen und sowohl die DLL- als auch die PDB-Dateien zum Paket hinzuzufügen.Wie erstellt man ein Nuget-Paket mit Release- und Debug-DLLs mit dem nuget Package Explorer?

So weit so gut, aber wenn ich das Paket zu einem anderen Projekt hinzufüge und versuche, während des Debugging in den Code zu gehen, wird es stattdessen über es gehen.

Ich verstehe, dass ich die Debug dll und pdb zu meinem Paket erstellen und hinzufügen muss, wenn ich beim Debuggen in den Code einsteigen möchte. Ich bin nicht sicher, obwohl, wie man diese zu dem Paket hinzufügt, das ich bereits erstellt habe, das bereits die Freigabe-DLL und die pdb-Akte enthält, die das gleiche genannt werden.

Irgendwelche Gedanken?

Antwort

5

Meine Gedanken sind, NuGet Verpackung ist eine Menge über Konventionen.

Es gibt kein Problem für verschiedenen Plattformen in Verpackungs gleichen Namensräume und dieselben Namen ist (wie in lib/net40/mydll.dll, lib/net35/mydll.dll etc im gleichen Paket), als NuGet registrierte Abhängigkeiten von Plattform filtert.

Mehrere Versionen für die gleiche Plattform zu erstellen scheint unkonventionell, ist voreingenommen in Richtung eines Pakets pro Build. Das bedeutet nicht, dass Sie es nicht tun können, aber Sie sollten sich zuerst fragen, ob Sie sollten.

Das heißt, wenn Ihre Debug-und Release-Builds sind sehr unterschiedlich (bedingte Kompilierung usw.) dies könnte jedoch nützlich sein. Aber wie wählen die Endanwender bei der Installation Ihres Pakets Release oder Debug?

Eine Idee könnte sein, eine Version pro Build-Konfiguration. Both can be installed into the project. Fügen Sie dazu entweder targets file to your package hinzu oder erstellen Sie a powershell install script, das bedingte Verweise direkt in der Zielprojektdatei hinzufügt, wenn Sie etwas weniger Grundlegendes wünschen als alles, was MsBuild für Sie tun kann.

Beispiel für die erste Taktik: Erstellen Sie eine .TARGET-Datei (in Ihrem Paket, einen build Ordner erstellen und dann build\YourLib.targets erstellen mit folgendem Inhalt):

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<ItemGroup Condition="'$(Configuration)' == 'Debug'"> 
    <Reference Include="YourLib"> 
     <HintPath>..\packages\YourLib.1.0.0\lib\Debug\YourLib.dll</HintPath> 
    </Reference> 
    </ItemGroup> 

    <ItemGroup Condition="'$(Configuration)' == 'Release'"> 
    <Reference Include="YourLib"> 
     <HintPath>..\packages\YourLib.1.0.0\lib\Release\YourLib.dll</HintPath> 
    </Reference> 
    </ItemGroup> 
</Project> 

Providing Sie Debug erstellt und Release-Ordner (Plattform Ordner ist optional), die Build-Ausgabe wird effektiv je nach Konfiguration ändern - vorausgesetzt, Paket-Consumer konventionellen Konfigurationsnamen, aber Sie könnten immer die Bedingung Logik ein wenig mit $(Configuration).Contains etc oder einfach nur in das Paket Readme

3

Inspiriert von @Tewr habe ich eine umständliche, aber funktionierende Lösung gefunden.

erstellen nuget mit folgenden Dateistruktur:

lib\net\$(Configuration)\YourLib.1.0.0.dll <---- put here some dummy file named YourLib.1.0.0.dll 
tools\release\YourLib.1.0.0.dll <--- put here the release version 
tools\debug\YourLib.1.0.0.dll <--- put here the debug version 
build\YourLib.targets 

Die Ziele Dateiinhalt:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<Target Name="CopyReferences" BeforeTargets="Build" Condition="Exists('..\packages\YourLib.1.0.0\lib\net\%24(Configuration)')">  
    <Exec Command="mkdir ..\packages\YourLib.1.0.0\lib\net\Release" /> 
    <Exec Command="mkdir ..\packages\YourLib.1.0.0\lib\net\Debug" /> 
    <Exec Command='copy "..\packages\YourLib.1.0.0\tools\Release\YourLib.1.0.0.dll" "..\packages\YourLib.1.0.0\lib\net\Release"' /> 
    <Exec Command='copy "..\packages\YourLib.1.0.0\tools\Debug\YourLib.1.0.0.dll" "..\packages\YourLib.1.0.0\lib\net\Debug"' /> 
    <Exec Command='rmdir /S /Q "..\packages\YourLib.1.0.0\lib\net\%24(Configuration)"' /> 
</Target> 

Die DLLs in lib Ordner automatisch hinzugefügt werden als Referenzen zu schaffen Folgendes in der Projektdatei:

<Reference Include="YourLib> 
    <HintPath>..\packages\YourLib.1.0.0\lib\net\$(Configuration)\YourLib.1.0.0.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

Nachdem Sie das Projekt zum ersten Mal bauen, wird das Ziel die Freigabe und Debug-Version von Tools kopieren \ Release und Tools \ debug Ordner lib \ net \ release und lib \ net \ debug Ordner. Am Ende wird es die lib \ net \ $ (Konfiguration) Ordner

löschen Enjoy (oder nicht - ich persönlich mag die Lösung nicht).

+1

Diese Antwort sollte betroffen sein. Vielen Dank. –

Verwandte Themen