Questo progetto fa riferimento ai pacchetti NuGet mancanti su questo computer


313

Ho un'applicazione ASP.NET MVC5 che ha funzionato ieri e ora ricevo questo errore quando provo a creare:

Questo progetto fa riferimento ai pacchetti NuGet mancanti su questo computer.

Ho selezionato le due opzioni che consentono a nuget di scaricare e installare automaticamente i pacchetti mancanti controllati / attivati. Ho anche provato a cancellare tutti i file nella cartella dei pacchetti e quindi a farli scaricare nuovamente da Nuget. Inoltre, quando apro nuget e cerco aggiornamenti, dice che non ce ne sono che debbano essere installati. Non riesco a immaginare cos'altro fare per andare oltre questo problema incredibilmente fastidioso.


1
Ho anche abilitato il ripristino di nuget facendo clic con il pulsante destro del mouse sul progetto e selezionando tale opzione. Ha quindi aggiunto una cartella nuget e tre elementi in quella cartella e non fa nulla per risolvere il problema. Ho provato a ricostruire e ancora ottengo lo stesso errore sopra.
Austin Harris,

La tua soluzione include una cartella .nuget e hai aggiornato NuGet all'ultima versione? Vedi qui: stackoverflow.com/questions/18833649/…
David Brabant

Sì, l'ho provato e non ha risolto il mio problema con il messaggio di errore di build.
Austin Harris,

Un altro motivo di questo errore è un The operation has timed out.errore. durante la costruzione. È necessario controllare il registro di compilazione o la scheda Diagnostica nella schermata Informazioni sulla compilazione non riuscita di Visual Studio Online.
Joshua Drake,

Nessuna delle soluzioni funziona per me. Sto scaricando da un repository e i pacchetti vengono ripristinati nella struttura di file corretta per il primo progetto, il secondo progetto non li trova. Il controllo di .csproj mostra che viene utilizzato il percorso relativo corretto, quindi non riesco a tentare di risolverlo. github.com/DanJ210/ProgrammersTest
Daniel Jackson

Risposte:


463

Nel mio caso, ho dovuto rimuovere quanto segue dal file .csproj:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

In effetti, in questo frammento puoi vedere da dove proviene il messaggio di errore.

Stavo conversione da MSBuild-Pacchetto Integrato di ripristino al pacchetto ripristino automatico ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )


12
Questo ha funzionato per me, ma dovevo solo rimuovere l'elemento <Target> </Target>. VS [2013] sembrava ripristinarlo se avessi rimosso anche l'elemento <Import>.
Robert Taylor,

3
Questo è davvero incredibile. Perché Microsoft rende tutto così difficile?
dimiguel

11
se questo può essere rimosso, perché è lì per primo?
OK999,

1
OK9999, ad un certo punto, è necessario averlo abilitato da una versione precedente di Visual Studio, facendo clic con il tasto destro del mouse sulla soluzione e scegliendo "Abilita ripristino pacchetto NuGet" che ha fatto alla vecchia maniera. Non ne abbiamo più bisogno
Loren Paulsen, il

3
Adoro le soluzioni che prevedono solo l'eliminazione di cose.
Todd Menier,

86

Una soluzione sarebbe quella di rimuovere dal file .csproj quanto segue:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

Come?

  1. Fare clic con il tasto destro sul progetto. Scarica progetto.
  2. Fare clic con il tasto destro sul progetto. Modifica csproj.
  3. Rimuovi la parte dal file. Salva.
  4. Fare clic con il tasto destro sul progetto. Ricarica progetto.

Quando sposti un progetto da un posto a un altro, funziona alla grande.
Decano Seo,

4
@IvanSantiago Era già RISPOSTA sopra con la stessa soluzione! .. Vota DOWN! ..
Jack

2
@ClintEastwood La mia risposta ha spiegato COME farlo. Questa è la differenza Se un utente è alla ricerca di COME la mia risposta ce l'ha, in contrasto con la risposta sopra.
Ivan Santiago,

2
@IvanSantiago Avresti potuto: aggiunto come commento o modificato la risposta originale con il How To.
Colin,

50

Nel mio caso è successo dopo che ho spostato la mia cartella della soluzione da una posizione a un'altra, riorganizzandola un po 'e nel processo è cambiata la relativa struttura di cartelle.

Quindi ho dovuto modificare tutte le voci simili alla seguente nel mio .csprojfile da

  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

per

  <Import Project="packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />

(Nota la modifica da ..\packages\a packages\. Potrebbe trattarsi di una struttura relativa diversa nel tuo caso, ma ottieni l'idea.)


3
Problema simile .... Avevo spostato il file .csproj a un livello superiore nella struttura della directory e ho dovuto passare da ".. \ .. \ pacchetti \ ..." a ".. \ pacchetti \ ...".
tmgirvin,

2
Ho avuto un problema simile, ma davvero strano. Lo stavo usando in un modulo di sottosoluzione, quindi andava bene in quella soluzione, ma quando ho fatto riferimento a quella soluzione da un'altra soluzione, i pacchetti erano in un posto diverso. Ho cambiato i pacchetti .. \ pacchetti in $ (SolutionDir) in tutto il .csproj e questo è stato risolto.
JoeNCA,

2
Se non vuoi andare in giro con il file .csproj manualmente, ho scoperto che prendere nota di tutti i pacchetti nuget che hai installato per il progetto, eliminarli e reinstallarli mi ha risolto il problema. Stavo cercando di rimuovere un progetto da una soluzione da inserire nel suo repository git quando ho riscontrato questo problema.
WiteCastle,

significa che il tuo .csproj è allo stesso livello del tuo file .sln?
Simon_Weaver,

@Simon_Weaver la posizione del tuo .csprojparente rispetto al tuo .slnnon ha importanza in questo contesto. Ciò che conta è se qualsiasi cosa a cui fai riferimento sia .csprojstata spostata da qualche altra parte. In tal caso, è necessario risolverlo. Se hai spostato il tuo '.csproj' con tutto ciò a cui fa riferimento, ma hai mantenuto la tua posizione originale .sln, allora dovresti correggere il .slnfile nella nuova posizione di .csproj-es, ma non sarebbe necessario modificarlo .csproj.
Nikita G.,

22

Ho facilmente risolvere questo problema facendo clic destro sulla mia soluzione e quindi facendo clic sul Abilita NuGet pacchetto Restore opzione

(PS: assicurarsi di disporre dell'installazione Nuget da Strumenti -> Estensioni e aggiornamenti -> Gestione pacchetti Nuget per Visual Studio 2013. In caso contrario, installare prima questa estensione)

Spero che sia d'aiuto.


7
Questo è il vecchio modo di ripristinare i pacchetti nuget e dovrebbe essere evitato.
The Muffin Man,

2
@TheMuffinMan: Puoi chiarire qual è il nuovo modo e perché questo modo dovrebbe essere evitato (considerando che l'output dell'errore VS 2013 ti dice di fare esattamente questo)?
CantrianBear,

2
@CantrianBear Vai a questa pagina docs.nuget.org/consume/package-restore e trova la sezione chiamata MSBuild-Integrated Package Restore. Questo è il vecchio modo ed elenca alcuni motivi per cui dovresti usare il nuovo modo.
The Muffin Man

Vedi il blog di David Ebbo su questo blog.davidebbo.com/2014/01/… Ora ... "NuGet ora ripristina sempre i pacchetti prima di creare in VS."
timB33

17

Nel mio caso ha avuto a che fare con la versione di Microsoft.Build.Bcl. La mia versione del pacchetto nuget era 1.0.21, ma i miei file di progetto puntavano ancora alla versione 1.0.14

Quindi ho modificato i miei file .csproj da:

  <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
   <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>

per:

 <Import Project="..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />

E la build funzionava di nuovo.


11

Se stai usando TFS

Rimuovere i file NuGet.exee NuGet.targetsdalla .nugetcartella della soluzione . Assicurarsi che i file stessi vengano rimossi anche dall'area di lavoro della soluzione. Conservare il NuGet.Configfile per continuare a ignorare l'aggiunta di pacchetti al controllo del codice sorgente.

Modifica ogni file di progetto (ad es. .Csproj, .vbproj) nella soluzione e rimuovi qualsiasi riferimento al NuGet.targetsfile. Apri i file di progetto nell'editor di tua scelta e rimuovi le seguenti impostazioni:

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

Se non si utilizza TFS

Rimuovi la .nugetcartella dalla tua soluzione. Assicurarsi che anche la cartella stessa venga rimossa dall'area di lavoro della soluzione.

Modifica ogni file di progetto (ad es. .Csproj, .vbproj) nella soluzione e rimuovi qualsiasi riferimento al NuGet.targetsfile. Apri i file di progetto nell'editor di tua scelta e rimuovi le seguenti impostazioni:

<RestorePackages>true</RestorePackages>  
...
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />  
...
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">  
    <PropertyGroup>
        <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

Riferimento: migrazione delle soluzioni integrate in MSBuild per utilizzare il ripristino automatico dei pacchetti


8

È possibile che i pacchetti siano stati ripristinati nella cartella sbagliata? Verificare che i percorsi nei file csproj siano corretti.

Se sono diversi, ciò potrebbe essere causato dal ripristino dei pacchetti in una posizione diversa. Ciò potrebbe essere causato dalla verifica di un file NuGet.Config che specifica un nodo come questo:

<add key="repositoryPath" value="..\..\Packages" />

I pacchetti vengono ripristinati, i progetti stanno ancora osservando la vecchia posizione.


1
Credo che potrebbe essere un problema di percorso da quando ho spostato la posizione dei file, ma non vedo dove c'è un percorso hard coded da nessuna parte. Ho cercato nel file proj e tutti i file dei pacchetti sembrano essere relativi in ​​questo modo: <Riferimento Include = "Antlr3.Runtime, Versione = 3.5.0.2, Cultura = neutro, PublicKeyToken = eb42632606e9261f, processorArchitecture = MSIL"> <SpecificVersion> False </SpecificVersion> <HintPath> .. \ pacchetti \ Antlr.3.5.0.2 \ lib \ Antlr3.Runtime.dll </HintPath> </Reference>
Austin Harris

l'aggiunta di questo a web.config non ha aiutato: <add key = "repositoryPath" value = ".. \ .. \ Packages" />
Austin Harris

Non si desidera aggiungerlo a web.config. Mi riferivo al file NuGet.config e vuoi controllare il percorso relativo. Dove sono i tuoi pacchetti relativi ai file csproj? Sono in .. \ pacchetti? Sembra che i pacchetti vengano ripristinati correttamente, ma i tuoi progetti sembrano nel posto sbagliato.
infojolt

6

Ho avuto lo stesso problema. Nel mio caso l'installazione del pacchetto Microsoft.Bcl.Build ha risolto il problema.


Questo ha funzionato anche per me - ma non ho idea se la cosa giusta da fare fosse installare quel pacchetto (che ha lo stesso effetto della versione di henkie14 che cambia la risposta di seguito o semplicemente cancella tutti quei target - stanno davvero facendo qualcosa di utile?
Gaz

Nella 1.0.21versione nessun file nel pacchetto, l'installazione della 1.0.14versione ha risolto questo problema.
FLCL

4

Rimosso sotto le righe nel file .csproj

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" 
Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
 <ErrorText>This project references NuGet package(s) that are missing on this computer. 
 Enable NuGet Package Restore to download them.  For more information, see 
 http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" 
Text="$([System.String]::Format('$(ErrorText)', 
'$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

3

Una soluzione sarebbe quella di rimuovere dal file .csproj quanto segue:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

Questo progetto fa riferimento ai pacchetti NuGet mancanti su questo computer. Abilita NuGet Package Restore per scaricarli. Per ulteriori informazioni, vedere http://go.microsoft.com/fwlink/?LinkID=322105 . Il file mancante è {0}.


1

Questi sono i passaggi che ho usato per risolvere il problema:

Per aggiungere pacchetti nuget alla tua soluzione:

  1. Fare clic con il tasto destro del mouse sul progetto (non sulla soluzione) a cui si desidera fare riferimento a pacchetti nuget.
  2. Scegli: Gestisci pacchetti nuget
  3. Nella finestra popup, a sinistra sono disponibili tre opzioni. Se scegli Online> Microsoft e .NET , sarai in grado di installare il raggruppatore di pacchetti API Web ASP.NET Microsoft 2.2 (o qualunque pacchetto tu abbia bisogno - il mio era questo).
  4. Ora fai clic con il pulsante destro del mouse sulla soluzione (non sul progetto) e scegli Abilita ripristino pacchetto nuget . Ciò comporterà il download automatico dei pacchetti al momento della compilazione.

Tutto quello che dovevo fare era abilitare il ripristino del pacchetto nugget per la soluzione. Apparentemente tutto il resto era già impostato correttamente.
schmiddy98,

1

Per me ha funzionato come ho appena copiato una cartella .nuget da una soluzione funzionante a quella esistente e ho fatto riferimento al suo contenuto!


1

La prima cosa da provare è fare clic con il tasto destro del mouse sulla soluzione e selezionare "Ripristina pacchetti Nuget".

Nel mio caso che non ha funzionato, ho seguito alcuni consigli sull'eliminazione di "Importa" e "Destinazione" nel file di progetto, questo ha funzionato per 2 dei miei 3 progetti, ma ho riscontrato un errore diverso nell'ultimo.

Ciò che ha funzionato è stato aprire la console di Package Manager ed eseguire:

Update-Package -reinstall -ProjectName MyProjectName

Ci vuole del tempo ma poiché reinstalla tutti i pacchetti il ​​progetto verrà compilato senza problemi


1

Ho lo stesso problema. L'ho incontrato quando ho copiato un progetto esistente e trasferito nella cartella della mia directory della soluzione e l'ho aggiunto come progetto esistente alla mia soluzione vuota. Quindi devo modificare il mio file csproj e cercare questa specifica riga di codice, il più delle volte, questo può essere trovato sulle ultime righe:

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Dopo quella riga, devo commentare questi:

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.props'))" />
    <Error Condition="!Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets'))" />
  </Target>
  <Import Project="..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets" Condition="Exists('..\..\..\..\..\packages\EntityFramework.6.4.0\build\EntityFramework.targets')" />

La tua soluzione richiederà che ci sia stato un cambiamento nel tuo progetto, seleziona Ricarica tutto:

inserisci qui la descrizione dell'immagine Quindi tutto funziona bene dopo aver ricostruito la mia soluzione.


0

Ho avuto lo stesso problema quando ho fatto riferimento alla libreria Class nella mia applicazione Web MVC,

il problema era la mancata corrispondenza del numero di versione del pacchetto nuget tra due progetti.

es: la mia libreria di classi aveva log4net di 1.2.3 ma la mia webapp aveva 1.2.6

correzione: assicurati solo che entrambi i progetti facciano riferimento allo stesso numero di versione.


0

Modificare .sln e .csproj non è sempre così facile o desiderabile. Una volta visualizzato l'elenco degli errori, puoi vedere quali progetti hanno pacchetti mancanti (inoltre, il nodo Riferimenti di solito indica che mancano gli assembly a meno che i pacchetti non siano codice sorgente, risorse, immagini o solo quelli basati su testo).

Rimuovere e aggiungere i pacchetti non è una buona idea a meno che non si usi l'ultima versione del pacchetto. Altrimenti preparati a sorprese, non sempre piacevoli.

Se, per esempio, il pacchetto è EntityFramework, dalla galleria NuGet si ottiene l'ultima versione che al momento della stesura di questo commento è 6.1.3 .

Quindi, forse il modo più sicuro per gestire la situazione è ripristinare i pacchetti mancanti uno per uno. Sì, un esercizio un po 'doloroso ma inseguire bug sottili a causa della diversa versione del pacchetto potrebbe essere molto più spiacevole.

Detto questo, e lasciare che EntityFramework sia il pacchetto mancante, è possibile emettere il seguente comando nella console di Package-Manager:

PM> Install-Package EntityFramework -Version 6.0.1 

Ciò installerà la versione corretta, ovvero 6.0.1 , ovvero quella specificata in pacchetti.config:

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="EntityFramework" version="6.0.1" targetFramework="net451" />
    </packages>

0

Ho avuto questo quando i file csproj e sln erano nella stessa cartella (stupido, lo so). Una volta sono passato al file sln nella cartella sopra la cartella csproj il mio


-1

Ho creato una cartella denominata '.nuget' nella cartella principale della soluzione Quindi ho aggiunto il file 'NuGet.Config' in questa cartella con il seguente contenuto

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<solution>
 <add key="disableSourceControlIntegration" value="true" />
</solution>
</configuration>

Quindi creato il file '.nuGet.targets' come sotto $ (MSBuildProjectDirectory) .. \

    <!-- Enable the restore command to run before builds -->
    <RestorePackages Condition="  '$(RestorePackages)' == '' ">false</RestorePackages>

    <!-- Property that enables building a package from a project -->
    <BuildPackage Condition=" '$(BuildPackage)' == '' ">false</BuildPackage>

    <!-- Determines if package restore consent is required to restore packages -->
    <RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

    <!-- Download NuGet.exe if it does not already exist -->
    <DownloadNuGetExe Condition=" '$(DownloadNuGetExe)' == '' ">false</DownloadNuGetExe>
</PropertyGroup>

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default will used the registered sources under %APPDATA%\NuGet\NuGet.Config -->
    <!--
        <PackageSource Include="https://nuget.org/api/v2/" />
        <PackageSource Include="https://my-nuget-source/nuget/" />
    -->
</ItemGroup>

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

<PropertyGroup Condition=" '$(OS)' != 'Windows_NT'">
    <!-- We need to launch nuget.exe with the mono command if we're not on windows -->
    <NuGetToolsPath>$(SolutionDir).nuget</NuGetToolsPath>
    <PackagesConfig>packages.config</PackagesConfig>
    <PackagesDir>$(SolutionDir)packages</PackagesDir>
</PropertyGroup>

<PropertyGroup>
    <!-- NuGet command -->
    <NuGetExePath Condition=" '$(NuGetExePath)' == '' ">$(NuGetToolsPath)\nuget.exe</NuGetExePath>
    <PackageSources Condition=" $(PackageSources) == '' ">@(PackageSource)</PackageSources>

    <NuGetCommand Condition=" '$(OS)' == 'Windows_NT'">"$(NuGetExePath)"</NuGetCommand>
    <NuGetCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(NuGetExePath)</NuGetCommand>

    <PackageOutputDir Condition="$(PackageOutputDir) == ''">$(TargetDir.Trim('\\'))</PackageOutputDir>

    <RequireConsentSwitch Condition=" $(RequireRestoreConsent) == 'true' ">-RequireConsent</RequireConsentSwitch>
    <!-- Commands -->
    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch) -o "$(PackagesDir)"</RestoreCommand>
    <BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols</BuildCommand>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(RestorePackages) == 'true'">
        RestorePackages;
        $(BuildDependsOn);
    </BuildDependsOn>

    <!-- Make the build depend on restore packages -->
    <BuildDependsOn Condition="$(BuildPackage) == 'true'">
        $(BuildDependsOn);
        BuildPackage;
    </BuildDependsOn>
</PropertyGroup>

<Target Name="CheckPrerequisites">
    <!-- Raise an error if we're unable to locate nuget.exe  -->
    <Error Condition="'$(DownloadNuGetExe)' != 'true' AND !Exists('$(NuGetExePath)')" Text="Unable to locate '$(NuGetExePath)'" />
    <SetEnvironmentVariable EnvKey="VisualStudioVersion" EnvValue="$(VisualStudioVersion)" Condition=" '$(VisualStudioVersion)' != '' AND '$(OS)' == 'Windows_NT' " />
    <DownloadNuGet OutputFilename="$(NuGetExePath)" Condition=" '$(DownloadNuGetExe)' == 'true' AND !Exists('$(NuGetExePath)')"  />
</Target>

<Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(RestoreCommand)"
          Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

    <Exec Command="$(RestoreCommand)"
          LogStandardErrorAsError="true"
          Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>

<Target Name="BuildPackage" DependsOnTargets="CheckPrerequisites">
    <Exec Command="$(BuildCommand)" 
          Condition=" '$(OS)' != 'Windows_NT' " />

    <Exec Command="$(BuildCommand)"
          LogStandardErrorAsError="true"
          Condition=" '$(OS)' == 'Windows_NT' " />
</Target>

<UsingTask TaskName="DownloadNuGet" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <OutputFilename ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Reference Include="System.Core" />
        <Using Namespace="System" />
        <Using Namespace="System.IO" />
        <Using Namespace="System.Net" />
        <Using Namespace="Microsoft.Build.Framework" />
        <Using Namespace="Microsoft.Build.Utilities" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                OutputFilename = Path.GetFullPath(OutputFilename);

                Log.LogMessage("Downloading latest version of NuGet.exe...");
                WebClient webClient = new WebClient();
                webClient.DownloadFile("https://nuget.org/nuget.exe", OutputFilename);

                return true;
            }
            catch (Exception ex) {
                Log.LogErrorFromException(ex);
                return false;
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

 <UsingTask TaskName="SetEnvironmentVariable" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
        <EnvKey ParameterType="System.String" Required="true" />
        <EnvValue ParameterType="System.String" Required="true" />
    </ParameterGroup>
    <Task>
        <Using Namespace="System" />
        <Code Type="Fragment" Language="cs">
            <![CDATA[
            try {
                Environment.SetEnvironmentVariable(EnvKey, EnvValue, System.EnvironmentVariableTarget.Process);
            }
            catch  {
            }
        ]]>
        </Code>
    </Task>
</UsingTask>

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.