Có cách nào để thực hiện cài đặt Nguồn gói NuGet cho mỗi giải pháp không?


83

Có ai biết cách làm cho Visual Studio áp dụng cấu hình nguồn gói NuGet cho mỗi giải pháp thay vì trên tất cả các giải pháp không? Tôi tiếp tục gặp vấn đề về lập phiên bản bởi vì tôi làm việc trên nhiều dự án mà mỗi dự án đều có kho lưu trữ NuGet riêng. Thật khó chịu khi phải nhớ repo NuGet nào thuộc về dự án nào và quay lại và áp dụng đúng vào dự án chính xác.


Không chắc chắn những gì bạn có ý nghĩa. Bạn chỉ có thể định cấu hình các nguồn gói nuget cho tất cả các giải pháp. Tệp package.config của bạn sẽ chứa các phiên bản của kho lưu trữ nuget mà dự án của bạn cần. Không cập nhật tự động. bạn có thể đưa ra một ví dụ về những gì bạn muốn làm.
Shyamal Desai

1
@Shyamal Tôi đang nói về nguồn gói NuGet, không phải bản thân các gói ... Tôi đã tìm ra cách thực hiện.
BenAlabaster

Câu trả lời:


136

TLDR: Có

NuGet sử dụng ứng dụng phân cấp các nguồn gói bắt đầu bằng NuGet.config ở cấp Hồ sơ người dùng Windows của bạn, sau đó áp dụng cấu hình ngày càng chi tiết hơn bắt đầu từ gốc của đường dẫn tệp chứa giải pháp của bạn, cuối cùng kết thúc bằng thư mục chứa của bạn tệp giải pháp.

Vì vậy, đây là những gì tôi đã tìm ra - nhờ một Twitterer hữu ích chỉ tôi đến tài liệu này:

https://docs.nuget.org/consume/nuget-config-file

Khi bạn chỉnh sửa các nguồn gói NuGet trong Tools > NuGet Package Manager > Package Manager Settings: Package Sourcestùy chọn của Visual Studio , nó sẽ áp dụng những thay đổi đó theo mặc định cho tệp NuGet.config được tìm thấy trong %APPDATA%\NuGetthư mục của bạn . Để ghi đè các cài đặt này trên cơ sở từng giải pháp (hoặc theo nhóm giải pháp), bạn cần thêm tệp NuGet.config được đặt chiến lược ở đâu đó dọc theo đường dẫn của giải pháp hoặc các giải pháp của bạn.

Tất cả sẽ trở nên rõ ràng nếu bạn đọc tài liệu NuGet, giải pháp tôi cung cấp bên dưới sẽ nhanh chóng cho phép bạn chỉ định cấu hình cho một giải pháp Visual Studio duy nhất:

  1. Điều hướng đến% APPDATA% \ NuGet và lấy một bản sao của NuGet.config
  2. Đổ một bản sao vào thư mục gốc của giải pháp của bạn - tức là nơi Application.sln tồn tại.
  3. Ghi đè các giá trị mặc định được áp dụng cho hồ sơ người dùng của bạn bằng cách chỉnh sửa bản sao để chỉ chứa các nguồn gói NuGet có liên quan đến giải pháp này - ví dụ: nguồn NuGet riêng chứa các gói độc quyền cho giải pháp này, nhưng không nên áp dụng cho các dự án khác - ví dụ:
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>

  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>

  <packageSources>

    <!-- Ditch all the Global NuGet package sources we only want a 
         single private NuGet repo for this project -->
    <clear />

    <!-- Add the private NuGet package source for this solution -->
    <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />

  </packageSources>

  <disabledPackageSources>

    <!-- Add any package sources to ignore here using the same keys as 
         defined in the packageSources list above-->

    <!--<add key="nuget.org" value="true" />-->

    <add key="Microsoft and .NET" value="true" />

  </disabledPackageSources>

</configuration>

Nếu bạn muốn một cấu hình áp dụng cho nhiều giải pháp, hãy đảm bảo tất cả các thư mục giải pháp của bạn đều được chứa trong một thư mục chung và đặt NuGet.config cho các nguồn gói liên quan đến các giải pháp đó trong thư mục chung đó, đảm bảo rằng mọi thư mục giải pháp cho các dự án không Không sử dụng các nguồn gói này không có trong thư mục chung này.


28
Cảm ơn BenAlabaster. Nếu bạn chỉ muốn giữ nó đơn giản, bạn chỉ có thể có một tập tin có chứa chỉ:<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Rubenisme

13
Bạn có thể phải đóng và mở lại Visual Studio để những thay đổi này có hiệu lực. Tôi đã thử kết thúc giải pháp của mình và điều đó là không đủ.
Jess

1
câu trả lời hay, sẽ tốt hơn nếu cấu hình ví dụ được cắt giảm chỉ còn những gì cần thiết. Ngoài ra, tôi đã thử với VS2015 và nhận xét của @Jess dường như không áp dụng được nữa, mở lại giải pháp đã chọn nguồn gói mới cho tôi.
danio

5

Tôi muốn thêm vào câu trả lời tuyệt vời do BenAlabaster cung cấp . Tôi đã có một số vấn đề ngược lại:

Công ty đã định cấu hình toàn cầu nguồn cấp dữ liệu riêng tư tùy chỉnh của họ để sử dụng trên tất cả các giải pháp theo mặc định và tôi muốn tạo một ứng dụng "nguyên mẫu" bằng cách sử dụng nguồn cấp dữ liệu công khai .

Với điều này (trong thư mục của giải pháp đó), nguồn cấp dữ liệu công khai chỉ có sẵn cho giải pháp cụ thể của tôi, trong khi vẫn giữ nguồn cấp dữ liệu của công ty làm mặc định cho tất cả các giải pháp khác:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
    <!-- Make sure we use the public nuget -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <disabledPackageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
  </disabledPackageSources>
</configuration>

Chìa khóa là xóa tất cả các nguồn cấp dữ liệu bị vô hiệu hóa trở lên , vì họ đã cố tình vô hiệu hóa nguồn cấp dữ liệu công khai trong NuGet.config của họ trong% APPDATA% \ NuGet.

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.