¿Alguien conoce alguna forma de hacer que Visual Studio aplique la configuración de las fuentes del paquete NuGet por solución en lugar de en todas las soluciones? Sigo teniendo problemas de control de versiones porque trabajo en varios proyectos, cada uno de los cuales tiene sus propios repositorios privados de NuGet. Es un dolor de cabeza seguir recordando qué repositorio de NuGet pertenece a qué proyecto y volver atrás y aplicar el correcto al proyecto correcto.
visual-studio
nuget
BenAlabaster
fuente
fuente
Respuestas:
TLDR: sí
NuGet usa una aplicación jerárquica de fuentes de paquetes que comienza con NuGet.config en el nivel de su perfil de usuario de Windows y luego aplica una configuración cada vez más granular comenzando en la raíz de la ruta del archivo que contiene su solución, finalmente terminando con el directorio que contiene su archivo de solución.
Así que esto es lo que he logrado averiguar, cortesía de un Twitterer útil que me indicó este documento:
https://docs.nuget.org/consume/nuget-config-file
Cuando edita las fuentes del paquete NuGet en la
Tools > NuGet Package Manager > Package Manager Settings: Package Sources
opción de Visual Studio , aplica esos cambios de forma predeterminada al archivo NuGet.config que se encuentra en su%APPDATA%\NuGet
directorio. Para anular esta configuración por solución (o por grupo de soluciones), debe agregar un archivo NuGet.config ubicado estratégicamente en algún lugar a lo largo de la ruta de su solución o soluciones.Todo quedará claro si lee el documento de NuGet, la solución que proporciono a continuación le permitirá especificar rápidamente una configuración para una única solución de 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>
Si desea una configuración que se aplica a múltiples soluciones, asegurar sus carpetas de soluciones están todas contenidas dentro de un directorio común y puso el NuGet.config de las fuentes de paquetes relevantes para esas soluciones en ese directorio común, asegurando que todas las carpetas de soluciones para proyectos que aren 't de usar estas fuentes de paquetes no están contenidos en esta carpeta común.
fuente
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Quiero sumarme a la excelente respuesta proporcionada por BenAlabaster . Tuve algo el problema opuesto:
La empresa configuró globalmente su feed nuget privado personalizado para usarlo en todas las soluciones de forma predeterminada, y yo quería crear una aplicación "prototipo" utilizando el feed nuget público .
Con esto (en el directorio de esa solución), el feed nuget público está disponible solo para mi solución específica, mientras que el feed de la empresa es el predeterminado para todas las demás soluciones:
<?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>
La clave fue borrar todos los feeds deshabilitados hacia arriba , ya que deshabilitaron deliberadamente el feed público en su NuGet.config en% APPDATA% \ NuGet.
fuente