2014-04-18 14 views
21

Possiedo un progetto Visual Studio 2013 che utilizza Nuget. Ho un file packages.config nella directory root della soluzione, che definisce i pacchetti Nuget che vogliamo installare. Ho anche un file nuget.config nella directory root della soluzione, che definisce packageSources, oltre ad alcuni pacchetti SourceReference. Una delle fonti del pacchetto è un repo privato per la nostra azienda.Visual Studio 2013 ignora nuget.config

Se apro un prompt dei comandi nella directory root della soluzione e digito nuget restore, funziona correttamente ed è in grado di raggiungere i nostri repository privati ​​per inserire alcuni dei pacchetti personalizzati che usiamo.

Ma se apro la soluzione in Visual Studio 2013 e la compilo, fallisce quando provo a scaricare i nostri pacchetti personalizzati, perché apparentemente sta ignorando il nostro file nuget.config, e quindi non sa del nostro repository privato di nuget .

Potrei andare in Strumenti> Opzioni e aggiungere il nostro repository privato, ma stiamo cercando di fare tutto all'interno della soluzione stessa, in modo che sia pronto all'uso senza alcuna configurazione personalizzata.

Perché nuget.config viene ignorato da VS 2013?

+3

Presumo che tu sappia già che Nuget cerca i file NuGet.config in questo ordine: 1. .nuget \ nuget.config 2. passa in modo ricorsivo da quella cartella del progetto alla radice. 3. il globale NuGet.config che dovrebbe essere in% appdata% \ NuGet \ nuget.config L'ultimo è il file a livello di macchina (per utente), in Users \ {user-name} \ roaming e questo è il file che viene effettuato quando all'interno di Visual Studio si accede a Strumenti> Opzioni e si aggiunge il repository privato. Pertanto, è possibile accedervi all'interno di PowerShell o qualsiasi altra cosa. – JamesWHurst

+0

@JamesWHurst Stai dicendo che Visual Studio non onorerà mai le informazioni di nuget.config nel mio progetto, e invece ho bisogno di usare PowerShell per modificare il file globale nuget.config per aggiungere il repository invece? –

+0

Funziona se sposti il ​​tuo nuget.config dalla stessa cartella della soluzione in una sottocartella chiamata .nuget (quindi .nuget \ nuget.config)? –

risposta

3

Ho creato un nuovo progetto con la seguente struttura di directory.

-ConsoleApplication1 
    -ConsoleApplication1 
    -ConsoleApplication1.sln 
    -nuget.config 

Prima di aggiungere il nuget.config non riuscivo a vedere nessuno dei miei pronti contro termine privati ​​quando si utilizza il Pacchetti Nuget gestire per caratteristica Solution. Quando ho aggiunto il nuget.config sono riuscito a vedere i miei nuovi repository nella finestra di dialogo. Sono anche in grado di ripristinare i miei pacchetti utilizzando NuGet restaurare e da un accumulo all'interno di VS 2013.

mio nuget.config sembra che questo

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageRestore> 
     <add key="enabled" value="True" /> 
     <add key="automatic" value="True" /> 
    </packageRestore> 
    <packageSources> 
     <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
     <add key="MyRepo" value="http://XX.XX.XXX.XX:81/host/repo" /> 
    </packageSources> 
    <activePackageSource> 
     <add key="All" value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 

In base al problema descritto l'unica cosa che posso pensare è che è possibile che in precedenza si sia tentato di disattivare Nuget Package Restore dal progetto prima di utilizzare il metodo aggiornato di ripristino dei pacchetti. Se non esegui il restore del pacchetto bomba del tappeto da ogni progetto contemporaneamente, potrebbe rimanere una logica che potrebbe interferire con il nuovo metodo. Ad esempio, se hai eliminato la cartella .nuget dalla soluzione, il file nuget.config potrebbe ancora essere presente causando conflitti.

+0

Come gestiresti il ​​file nuget.config in VS 2013 se è "sopra" la tua attuale directory della soluzione? Puoi approfondire la struttura della tua directory in termini di dove si trova il tuo file nuget.config, per quanto riguarda dove si trovano i file .sln e .csproj? E come appare la tua vista Solution Explorer, puoi vedere il file nuget.config? –

+0

Questo non ha senso. Perché è necessario posizionare nuget.config sopra la directory della soluzione, dove, logicamente, si applicherebbe a tutte le soluzioni. Non può essere giusto ... – crush

+0

Credo che abbia senso metterlo sopra la tua soluzione. Abbiamo il nostro file di soluzione principale nella radice del nostro trunk e il nostro regolare NuGet.config è lì dentro. Tuttavia, abbiamo anche una struttura di cartelle separata/Devs/UserXxx sotto il bagagliaio in cui i nostri sviluppatori hanno le proprie soluzioni. Il problema è che quelle soluzioni non rispettano le posizioni dei pacchetti. Anche la nostra soluzione utilizza progetti da un repository completamente diverso che dovrebbe avere la propria cartella di pacchetti. Tuttavia, NuGet non consente due percorsi di pacchetti da un'unica soluzione, pertanto dobbiamo creare una posizione comune per tutti i pacchetti. – MarqueIV

0

È sotto la tua soluzione Progetto di sito Web o progetto di applicazione Web? Penso che il progetto del sito web ignori il file nuget.config.

18

Riavvia Visual Studio dopo aver modificato NuGet.config!

Ho notato che VS2012 non rileva le modifiche a NuGet.config fino a dopo il riavvio.

+0

Credo che questo fosse il problema anche nel mio progetto del 2015. Pensavo di aver ricominciato a un certo punto e ancora non si registrava, ma dopo che ha iniziato a funzionare ho fatto alcuni test approfonditi e tutto funzionava come previsto finché ho riavviato VS. – JoeBrockhaus

1

Ho trovato che se si dispone di una soluzione multi-progetto, con i progetti tutti in cartelle sotto la cartella della soluzione, l'inserimento di NuGet.config in una cartella di progetto non funziona. Non rileva la fonte del pacchetto privato. È funziona se si inserisce un NuGet.config nella cartella della soluzione.

Cioè, questo non lo fa lavoro:

  • Soluzione
    • ProjectA
      • ProjectA.csproj
    • ProjectB
      • ProjectB.csproj
      • NuGet.config

mentre questo fa lavoro:

  • Soluzione
    • ProjectA
      • ProjectA.csproj
    • ProjectB
      • ProjectB.csproj
    • NuGet.config

ho anche trovato esimo sull'opzione disableSourceControlIntegration non funziona se specificato in \NuGet.config. Funziona solo quando in .nuget\NuGet.config. Quindi ho due file di configurazione per la mia soluzione, uno nella radice che contiene la configurazione del pacchetto sorgente e uno nella cartella .nuget con l'opzione disableSourceControlIntegration.

Testato con Visual Studio 2012 Update 5 e estensione NuGet Package Manager 2.8.5.