Đóng gói các dự án NuGet được biên dịch trong chế độ phát hành?


109

Có cách nào để tạo một gói NuGet bằng cách sử dụng mã được biên dịch trong chế độ phát hành không? Hay có lý do nào đó tôi chỉ nên xuất bản (cung cấp cục bộ, trong trường hợp này) các gói được biên dịch ở chế độ gỡ lỗi?

Mỗi khi tôi gọi nuget packtừ thư mục dự án của mình, nơi tôi có tệp nuspec bên dưới, trên mã tôi chỉ được biên dịch ở chế độ phát hành, nó phàn nàn về việc không tìm thấy DLL trong thư mục gỡ lỗi ( "\bin\Debug\SomeProject.dll"). Nếu tôi biên dịch nó ở chế độ gỡ lỗi, những tệp đó ở đó và nó sẽ đóng gói chúng như bình thường.

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

Câu trả lời:


207

Bạn có thể giải quyết nó như thế này: NuGet.exe pack Foo.csproj -Prop Configuration=Release( tài liệu tham khảo ).


10
Đối với bất kỳ ai muốn câu chuyện ngắn từ liên kết (tuy nhiên, đọc tốt), đã có sự thay đổi từ v1.3 sang v1.4 chuyển từ mặc định của Bản phát hành thành mặc định được kéo từ cài đặt dự án chỉ có thể được sửa đổi trong tệp dự án trực tiếp (không có tùy chọn VS GUI). Để tránh chỉnh sửa thuộc tính dòng lệnh cho tất cả các nuget packcuộc gọi trong tương lai , hãy chỉnh sửa tệp dự án XML trong trình soạn thảo văn bản yêu thích của bạn.
patridge

4
Có cách nào để đóng gói cả phiên bản Phát hành và Gỡ lỗi trong một gói và sau đó để dự án của tôi tự động sử dụng Gỡ lỗi so với Phiên bản phát hành tùy thuộc vào việc tôi có đang ở trong cấu hình Giải pháp gỡ lỗi và Giải pháp phát hành không?
JD

2
Nếu bạn chỉ muốn các ký hiệu gỡ lỗi cho gói của mình, bạn có thể đưa các tệp PDB của mình vào * .nuspec (ví dụ <file src="bin\Release\*.pdb" target="lib\net40\" />:) hoặc xuất bản một gói ký hiệu cùng với gói DLL của bạn.
patridge

1
Liên kết @Giorgi hết hạn
Weipeng L

1
@JD Tôi cũng muốn đóng gói cả Gỡ lỗi và Bản phát hành , và tôi đã tìm thấy điều này: stackoverflow.com/questions/37673692/…
Peter-Yu

16

Nếu bạn đang sử dụng sự kiện sau xây dựng và bạn muốn tạo một gói cho dù sử dụng cấu hình Gỡ lỗi hay Phát hành, bạn có thể thiết lập dòng lệnh sự kiện sau tạo như sau:

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

10

Để NuGet tự động sử dụng chế độ Phát hành khi bạn chạy nuget pack, hãy làm như sau:

  1. Mở .csprojtệp của bạn trong trình soạn thảo văn bản.
  2. Tìm dòng sau:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. Trong dòng này, thay thế Debugbằng Release.
  4. Lưu thay đổi.

0

Các câu trả lời ở đây là tốt, nhưng tôi đã gặp rất nhiều vấn đề với vấn đề này cho một dự án .NET Standard. Tôi đã có một dự án chỉ định xuất bản các tệp nhị phân Bản phát hành, nhưng nó không tôn trọng đường dẫn xuất bản dựng mặc định của tôi.

Tôi đã thêm điều này vào CSProj của mình, sau đó cho phép tôi sử dụng câu trả lời được chấp nhận ở đây .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.