บรรจุโครงการ NuGet รวบรวมในโหมดเผยแพร่หรือไม่


109

มีวิธีสร้างแพ็คเกจ NuGet โดยใช้โค้ดที่คอมไพล์ในโหมดรีลีสหรือไม่? หรือมีเหตุผลบางอย่างที่ฉันควรเผยแพร่ (ให้ใช้ได้เฉพาะในกรณีนี้) แพ็คเกจที่คอมไพล์ในโหมดดีบัก

ทุกครั้งที่ฉันโทรnuget packจากไดเร็กทอรีโปรเจ็กต์ของฉันซึ่งฉันมีไฟล์ nuspec ด้านล่างบนโค้ดที่ฉันรวบรวมในโหมดรีลีสเท่านั้นมันบ่นว่าไม่พบ DLL ในโฟลเดอร์ดีบัก ( "\bin\Debug\SomeProject.dll") ถ้าฉันคอมไพล์ในโหมดดีบั๊กไฟล์เหล่านั้นจะอยู่ที่นั่นและจะรวมไฟล์ตามที่ควรจะเป็น

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

คำตอบ:


208

คุณสามารถแก้ปัญหาได้ดังนี้: NuGet.exe pack Foo.csproj -Prop Configuration=Release( ข้อมูลอ้างอิง )


10
สำหรับใครก็ตามที่ต้องการเรื่องสั้นจากลิงค์ (อ่านดีๆ) มีการเปลี่ยนแปลงจาก v1.3 เป็น v1.4 ที่เปลี่ยนจากค่าเริ่มต้นของ Release เป็นค่าเริ่มต้นที่ดึงมาจากการตั้งค่าโปรเจ็กต์ที่สามารถแก้ไขได้เฉพาะใน ไฟล์โครงการโดยตรง (ไม่มีตัวเลือก VS GUI) หากต้องการหลีกเลี่ยงการปรับแต่งคุณสมบัติบรรทัดคำสั่งสำหรับการnuget packโทรในอนาคตทั้งหมดให้แก้ไขไฟล์โครงการ XML ในโปรแกรมแก้ไขข้อความที่คุณชื่นชอบ
patridge

4
มีวิธีการทำแพ็คเกจทั้งรุ่น Release และรุ่น Debug ในแพ็คเกจเดียวจากนั้นให้โครงการของฉันใช้การแก้ปัญหาโดยอัตโนมัติเทียบกับรุ่นที่เผยแพร่โดยขึ้นอยู่กับว่าฉันอยู่ในการกำหนดค่า Debug vs. Release Solution หรือไม่
JD

2
หากคุณต้องการเพียงแค่สัญลักษณ์ดีบักสำหรับแพ็คเกจของคุณคุณสามารถรวมไฟล์ PDB ของคุณไว้ใน * .nuspec (เช่น<file src="bin\Release\*.pdb" target="lib\net40\" />) หรือเผยแพร่แพ็คเกจสัญลักษณ์ควบคู่ไปกับแพ็คเกจ DLL ของคุณ
patridge

1
ลิงก์ @Giorgi หมดอายุ
Weipeng L

1
@JD ฉันต้องการแพ็กเกจทั้ง Debug และ Release, และฉันได้พบสิ่งนี้: stackoverflow.com/questions/37673692/…
Peter-Yu

16

หากคุณกำลังใช้เหตุการณ์หลังการสร้างและคุณต้องการสร้างแพ็คเกจไม่ว่าจะใช้การกำหนดค่าดีบักหรือรีลีสคุณสามารถตั้งค่าบรรทัดคำสั่งเหตุการณ์หลังการสร้างได้ดังนี้:

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

10

ในการให้ NuGet ใช้โหมด Release โดยอัตโนมัติเมื่อคุณเรียกใช้nuget packให้ทำดังต่อไปนี้:

  1. เปิด.csprojไฟล์ของคุณในโปรแกรมแก้ไขข้อความ
  2. ค้นหาบรรทัดต่อไปนี้:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. ในบรรทัดนี้ให้แทนที่Debugด้วยRelease.
  4. บันทึกการเปลี่ยนแปลง.

0

คำตอบที่นี่ดี แต่ฉันมีปัญหามากมายกับสิ่งนี้สำหรับโครงการ. NET Standard ฉันมีโปรเจ็กต์ที่กำลังจะเผยแพร่ไบนารีรีลีสเท่านั้น แต่มันไม่เป็นไปตามพา ธ เอาต์พุตบิลด์เริ่มต้นของฉัน

ฉันเพิ่มนี้เพื่อ CSProj ของฉันที่แล้วเปิดใช้งานผมจะใช้คำตอบที่ได้รับการยอมรับที่นี่

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.