Packen von NuGet-Projekten, die im Release-Modus kompiliert wurden?


109

Gibt es eine Möglichkeit, ein NuGet-Paket mit Code zu erstellen, der im Release-Modus kompiliert wurde? Oder gibt es einen Grund, warum ich nur Pakete veröffentlichen sollte (in diesem Fall lokal verfügbar machen), die im Debug-Modus kompiliert wurden?

Jedes Mal nuget pack, wenn ich aus meinem Projektverzeichnis, in dem ich die unten stehende Nuspec-Datei habe, Code anrufe, den ich nur im Release-Modus kompiliert habe, wird beschwert, dass die DLL nicht im Debug-Ordner ( "\bin\Debug\SomeProject.dll") gefunden wird. Wenn ich es im Debug-Modus kompiliere, sind diese Dateien vorhanden und es packt sie so, wie es sollte.

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>http://somewhere/project.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
    </metadata>
</package>

Antworten:


207

Sie können es so lösen: NuGet.exe pack Foo.csproj -Prop Configuration=Release( die Referenz ).


10
Für alle, die die Kurzgeschichte über den Link lesen möchten (allerdings gut gelesen), gab es eine Änderung von Version 1.3 zu Version 1.4, die von einer Standardeinstellung für Release zu einer Standardeinstellung wechselt, die aus einer Projekteinstellung stammt, die nur geändert werden kann die Projektdatei direkt (keine VS GUI Option). nuget packBearbeiten Sie die XML-Projektdatei in Ihrem bevorzugten Texteditor, um die Optimierung der Befehlszeileneigenschaften für alle zukünftigen Aufrufe zu vermeiden .
Patridge

4
Gibt es eine Möglichkeit, sowohl eine Release- als auch eine Debug-Version in einem Paket zu verpacken und mein Projekt dann automatisch die Debug- und die Release-Version verwenden zu lassen, je nachdem, ob ich mich in der Konfiguration Debug vs. Release Solution befinde?
JD

2
Wenn Sie lediglich Debug-Symbole für Ihr Paket wünschen, können Sie entweder Ihre PDB-Dateien in die * .nuspec (z. B. <file src="bin\Release\*.pdb" target="lib\net40\" />) aufnehmen oder ein Symbolpaket neben Ihrem DLL-Paket veröffentlichen.
Patridge

1
@ Giorgi Link abgelaufen
Weipeng L

1
@JD Ich möchte auch sowohl Debug als auch Release package verpacken und habe dies gefunden: stackoverflow.com/questions/37673692/…
Peter-Yu

16

Wenn Sie ein Post-Build-Ereignis verwenden und ein Paket erstellen möchten, unabhängig davon, ob Sie die Debug- oder Release-Konfiguration verwenden, können Sie die Post-Build-Ereignisbefehlszeile wie folgt einrichten:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)

10

Gehen Sie nuget packwie folgt vor, damit NuGet beim Ausführen automatisch den Freigabemodus verwendet :

  1. Öffnen Sie Ihre .csprojDatei in einem Texteditor.
  2. Suchen Sie die folgende Zeile:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. In dieser Zeile ersetzen Debugmit Release.
  4. Änderungen speichern.

0

Die Antworten hier sind gut, aber ich hatte viele Probleme damit für ein .NET Standard-Projekt. Ich hatte ein Projekt, das nur Release-Binärdateien veröffentlichen wollte, aber meinen Standard-Build-Ausgabepfad nicht respektierte.

Ich habe diese auf meine Csproj , die mir dann die akzeptierte Antwort auf aktiviert haben hier .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.