2015-11-20 5 views
29

Qualcuno sa di un modo per far sì che Visual Studio applichi la configurazione delle origini del pacchetto NuGet per soluzione anziché attraverso tutte le soluzioni? Continuo ad avere problemi di versioning perché lavoro su più progetti che hanno ciascuno i propri repository NuGet privati. È una seccatura per continuare a ricordare quale repository NuGet appartiene a quale progetto e tornare e applicare quello corretto al progetto corretto.Esiste un modo per configurare le impostazioni di Origine pacchetto NuGet per soluzione?

+0

Non sai cosa intendi. È possibile configurare solo le origini del pacchetto nuget per tutte le soluzioni. Il tuo file package.config conterrà le versioni dei repository nuget necessari al tuo progetto. Non aggiornare automaticamente. puoi dare un esempio di ciò che vuoi fare. –

+1

@Shyamal Stavo parlando delle fonti del pacchetto NuGet, non dei pacchetti stessi ... Ho capito come farlo. – BenAlabaster

risposta

58

TLDR: Sì

NuGet utilizza un'applicazione gerarchica delle fonti di pacchetti che iniziano con la NuGet.config al livello del vostro profilo utente di Windows e poi applicare la configurazione più granulare a partire dalla radice del percorso del file che contiene la tua soluzione, per finire con la directory contenente il tuo file di soluzione.

Così qui è quello che sono riuscito a capire - per gentile concessione di un Twitterer utile avermi a questo documento:

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

Quando si modificano i sorgenti dei pacchetti Nuget in opzione di Visual Studio Tools > NuGet Package Manager > Package Manager Settings: Package Sources, essa si applica tali modifiche sono predefinite nel file NuGet.config trovato nella directory %APPDATA%\NuGet. Per sovrascrivere queste impostazioni su una soluzione per soluzione (o per gruppo di soluzioni), è necessario aggiungere un file NuGet.config posizionato in modo strategico lungo il percorso della soluzione o delle soluzioni.

Tutto sarà chiaro se si legge il documento NuGet, la soluzione fornisco qui di seguito vi permetterà rapidamente di specificare una configurazione per un'unica soluzione di Visual Studio:

  1. Spostarsi% appdata% \ NuGet e grab una copia di NuGet.config
  2. Esegui il dump di una copia nella radice della soluzione, ovvero dove vive Application.sln.
  3. Sovrascrivere i valori predefiniti applicati al profilo utente modificando la copia in modo che contenga solo le origini del pacchetto NuGet rilevanti per questa soluzione, ad esempio l'origine NuGet privata che contiene pacchetti proprietari per questa soluzione, ma non deve essere applicata ad altri progetti - per esempio:
<?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 si desidera una configurazione da applicare a molteplici soluzioni, verificare le cartelle della soluzione sono tutti contenuti all'interno di una directory comune e mettere il NuGet.config per le sorgenti dei pacchetti rilevanti per la quelle soluzioni in quella directory comune, assicurando che qualsiasi cartella di soluzione per i progetti che non sono per utilizzare queste fonti di pacchetti non sono contenute in questa cartella comune.

+10

Grazie BenAlabaster. Se vuoi semplicemente mantenerlo semplice, puoi semplicemente avere un file contenente solo: ' ' – Rubenisme

+7

Potrebbe essere necessario chiudere e riaprire Visual Studio affinché queste modifiche abbiano effetto. Ho provato a chiudere la mia soluzione e non era abbastanza. – Jess

+0

Grazie, entrambi i punti positivi – BenAlabaster

0

Desidero aggiungere l'eccellente risposta fornita da BenAlabaster. Ho avuto il problema opposto:

L'azienda ha configurato globalmente il proprio feed privato su nuget da utilizzare su tutte le soluzioni per impostazione predefinita e volevo creare un'applicazione "prototipo" utilizzando public nuget feed.

Con questo (nella directory di questa soluzione), il feed NuGet pubblico è disponibile solo la mia soluzione specifica, mantenendo avanzamento della società di default per tutte le altre soluzioni:

<?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 chiave era quello di cancellare tutti i feed disabilitati verso l'alto, poiché disabilitavano deliberatamente il feed pubblico nel loro NuGet.config in% APPDATA% \ NuGet.