Mengemas proyek NuGet dikompilasi dalam mode rilis?

109

Apakah ada cara untuk membuat paket NuGet menggunakan kode yang dikompilasi dalam mode rilis? Atau adakah alasan mengapa saya hanya mempublikasikan (menyediakan secara lokal, dalam kasus ini) paket yang dikompilasi dalam mode debug?

Setiap kali saya menelepon nuget packdari direktori proyek saya, di mana saya memiliki file nuspec di bawah ini, pada kode yang hanya saya kompilasi dalam mode rilis, ia mengeluh tentang tidak menemukan DLL di folder debug ( "\bin\Debug\SomeProject.dll"). Jika saya mengkompilasinya dalam mode debug, file-file itu ada di sana dan mengemasnya sebagaimana mestinya.

<?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>
patridge
sumber

Jawaban:

207

Anda dapat menyelesaikannya seperti ini: NuGet.exe pack Foo.csproj -Prop Configuration=Release( referensi ).

Giorgi
sumber
10
Bagi siapa saja yang menginginkan cerita pendek dari tautan (bacaan yang baik, meskipun), ada perubahan dari v1.3 ke v1.4 yang berubah dari default Rilis ke default ditarik dari pengaturan proyek yang hanya dapat dimodifikasi di file proyek secara langsung (tidak ada opsi VS GUI). Untuk menghindari penyesuaian properti baris perintah untuk semua nuget packpanggilan di masa mendatang , edit file proyek XML di editor teks favorit Anda.
patridge
4
Apakah ada cara untuk mengemas versi Rilis dan Debug dalam satu paket dan kemudian membuat proyek saya menggunakan Debug secara otomatis vs. versi Rilis bergantung pada apakah saya dalam konfigurasi Debug vs. Solusi Rilis?
JD
2
Jika Anda hanya ingin simbol debug untuk paket Anda, Anda dapat menyertakan file PDB Anda di * .nuspec (misalnya, <file src="bin\Release\*.pdb" target="lib\net40\" />) atau mempublikasikan paket simbol di samping paket DLL Anda.
patridge
1
Tautan @ Giorgi kedaluwarsa
Weipeng L
1
@JD Saya juga ingin mengemas Debug dan Rilis, dan saya telah menemukan ini: stackoverflow.com/questions/37673692/…
Peter-Yu
16

Jika Anda menggunakan peristiwa post-build dan ingin membuat paket baik menggunakan konfigurasi Debug atau Release, Anda dapat menyiapkan commandline peristiwa post-build seperti ini:

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

Agar NuGet secara otomatis menggunakan mode Rilis saat Anda menjalankan nuget pack, lakukan hal berikut:

  1. Buka .csprojfile Anda di editor teks.
  2. Temukan baris berikut:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. Di baris ini, ganti Debugdengan Release.
  4. Simpan perubahan.
Sam
sumber
0

Jawabannya di sini bagus, tetapi saya mengalami banyak masalah dengan ini untuk proyek .NET Standard. Saya memiliki proyek yang hanya akan menerbitkan binari Rilis, tetapi itu tidak menghormati jalur keluaran build default saya.

Saya menambahkan ini ke CSProj saya yang kemudian memungkinkan saya menggunakan jawaban yang diterima di sini .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
sumber