Existe uma maneira de fazer a configuração de código do pacote NuGet por solução?

Alguém sabe de uma forma de fazer o Visual Studio aplicar a configuração de fontes de pacotes NuGet por solução, em vez de todas as soluções? Continuo a ter problemas de versionamento porque trabalho em vários projectos que cada um tem os seus próprios repositórios privados de NuGet. É uma dor no *** para continuar a lembrar qual NuGet repo pertence a qual projeto e voltar e aplicar o correto para o projeto correto.

Author: BenAlabaster, 2015-11-20

2 answers

TLDR: Sim

O NuGet usa uma aplicação hierárquica de fontes de pacotes a começar pelo NuGet.configuração ao nível do seu perfil de utilizador do Windows e, em seguida, aplicar mais e mais configuração granular começando na raiz do Caminho do ficheiro que contém a sua solução, terminando finalmente com o directório que contém o seu ficheiro de solução.

Eis o que consegui descobrir, cortesia de um idiota prestável a apontar - me para isto. Documento:

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

Quando editar o código do pacote NuGet na opção Visual Studio Tools > NuGet Package Manager > Package Manager Settings: Package Sources, aplica essas alterações por omissão ao NuGet.o ficheiro de configuração foi encontrado na sua pasta %APPDATA%\NuGet. Para sobrepor estas configurações numa base por solução (ou por grupo de soluções), você precisa adicionar um NuGet estrategicamente colocado.ficheiro de configuração algures ao longo do caminho da sua solução ou soluções.

Tudo se tornará claro se ler o documento NuGet, a solução que eu fornecer abaixo, permitirá rapidamente que você especifique uma configuração para uma única solução Visual Studio:

  1. navegar para %APPDATA % \NuGet e obter uma cópia do NuGet.config
  2. despeje uma cópia na raiz da sua solução - isto é, onde a aplicação.a sln está viva.
  3. sobreponha os valores por omissão aplicados ao seu perfil de utilizador, editando a cópia para conter apenas as fontes do pacote NuGet que são relevantes para esta solução - por exemplo, o privado NuGet source que contém pacotes proprietários para esta solução, mas não deve ser aplicado a outros projetos-por exemplo:
<?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>

Se quiser que uma configuração se aplique a várias soluções, certifique-se que as suas pastas de soluções estão todas contidas numa pasta comum e coloque o NuGet.configuração para as fontes de pacotes relevantes para essas soluções nesse diretório comum, garantindo que quaisquer pastas de soluções para projetos que não são para usar estas fontes de pacotes não são contido nesta pasta comum.

 79
Author: BenAlabaster, 2015-11-20 19:28:33
Quero acrescentar à excelente resposta dada pelo BenAlabaster. Eu tive um problema um pouco oposto:

A empresa configurou globalmente a sua fonte personalizada privada nuget para utilização em todas as soluções por omissão, e eu queria fazer um aplicativo de "protótipo" usando a fonte pública NuGet.

Com isto (no directório dessa solução), a alimentação pública do nuget está disponível apenas para a minha solução específica, mantendo a alimentação da empresa como padrão para todos os outros soluções:

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

A chave era limpar todas as fontes de alimentação para desativação por cima , uma vez que eles deliberadamente desativaram a alimentação pública em seu NuGet.configuração em % APPDATA % \NuGet.

 2
Author: Marcel, 2018-03-09 07:30:55