Кто-нибудь знает, как заставить Visual Studio применять конфигурацию источников пакетов NuGet для каждого решения, а не для всех решений? У меня продолжаются проблемы с версией, потому что я работаю над несколькими проектами, у каждого из которых есть свои частные репозитории NuGet. Трудно вспомнить, какое репо NuGet принадлежит какому проекту, и возвращаться назад и применять правильный репозиторий к правильному проекту.
visual-studio
nuget
БенАлабастер
источник
источник
Ответы:
TL; DR: Да
NuGet использует иерархическое приложение источников пакетов, начиная с NuGet.config на уровне вашего профиля пользователя Windows, а затем применяя все более и более детальную конфигурацию, начиная с корня пути к файлу, содержащего ваше решение, и, наконец, заканчивая каталогом, содержащим ваше решение. файл решения.
Итак, вот что мне удалось выяснить - любезно любезный Twitterer указал мне на этот документ:
https://docs.nuget.org/consume/nuget-config-file
Когда вы редактируете источники пакета NuGet в параметре Visual Studio
Tools > NuGet Package Manager > Package Manager Settings: Package Sources
, он применяет эти изменения по умолчанию к файлу NuGet.config, найденному в вашем%APPDATA%\NuGet
каталоге. Чтобы переопределить эти параметры для каждого решения (или для группы решений), вам необходимо добавить стратегически размещенный файл NuGet.config где-нибудь по пути к вашему решению или решениям.Все станет ясно, если вы прочитаете документ NuGet, решение, которое я предлагаю ниже, быстро позволит вам указать конфигурацию для одного решения Visual Studio:
<?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>
Если вы хотите, чтобы конфигурация применялась к нескольким решениям, убедитесь, что все папки вашего решения содержатся в общем каталоге, и поместите NuGet.config для источников пакетов, относящихся к этим решениям, в этот общий каталог, гарантируя, что все папки решений для проектов, которые не «т использовать эти источники пакетов не содержится в этой общей папке.
источник
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Я хочу , чтобы добавить отличный ответ , предоставленный BenAlabaster . У меня была несколько противоположная проблема:
Компания глобально настроила свой собственный частный канал nuget для использования во всех решениях по умолчанию, и я хотел создать «прототип» приложения с использованием общедоступного канала nuget .
При этом (в каталоге этого решения) общедоступный канал nuget доступен только для моего конкретного решения, при этом канал компании остается по умолчанию для всех других решений:
<?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>
Ключ состоял в том, чтобы очистить все отключенные вверх каналы , поскольку они намеренно отключили общедоступный канал в своем NuGet.config в% APPDATA% \ NuGet.
источник