wake-up-neo.com

Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen

Ich habe eine ASP.NET MVC5-Anwendung, die gestern funktioniert hat, und jetzt wird diese Fehlermeldung angezeigt, wenn ich versuche, Folgendes zu erstellen:

Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen.

Ich habe die beiden Optionen aktiviert, mit denen Nuget fehlende Pakete automatisch herunterladen und installieren kann. Ich habe auch versucht, alle Dateien im Paketordner zu löschen und sie dann von Nuget erneut herunterzuladen. Auch wenn ich Nuget öffne und nach Updates suche, heißt es, dass keine installiert werden müssen. Ich kann mir nicht vorstellen, was ich tun soll, um über dieses erstaunlich ärgerliche Problem hinauszugehen.

275
Austin Harris

In meinem Fall musste ich Folgendes aus der .csproj-Datei entfernen:

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

Tatsächlich können Sie in diesem Snippet sehen, woher die Fehlermeldung kommt.

Ich konvertierte von MSBuild-Integrated Package Restore zu Automatic Package Restore ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )

416
Loren Paulsen

Eine Lösung besteht darin, Folgendes aus der .csproj-Datei zu entfernen:

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

Wie?

  1. Klicken Sie mit der rechten Maustaste auf das Projekt. Projekt entladen.
  2. Klicken Sie mit der rechten Maustaste auf das Projekt. Csproj bearbeiten.
  3. Entfernen Sie das Teil aus der Datei. Sparen.
  4. Klicken Sie mit der rechten Maustaste auf das Projekt. Projekt neu laden.
71
Ivan Santiago

In meinem Fall geschah dies, nachdem ich meinen Lösungsordner von einem Ort an einen anderen verschoben, ein wenig umstrukturiert und dabei die relative Ordnerstruktur geändert hatte.

Also musste ich alle Einträge bearbeiten, die dem folgenden in meiner _.csproj_ -Datei ähnelten

_  <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')" />
_

zu

_  <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')" />
_

(Beachten Sie die Änderung von ..\packages\ zu packages\. Es könnte eine andere relative Struktur in Ihrem Fall sein, aber Sie haben die Idee.)

44
Nikita G.

Ich löse dieses Problem einfach, indem ich mit der rechten Maustaste auf meine Lösung klicke und dann auf die Option NuGet-Paketwiederherstellung aktivieren klicke

(P.S: Stellen Sie sicher, dass Sie über die Nuget-Installation von Tools -> Erweiterungen und Updates -> Nuget Package Manager für Visual Studio 2013 verfügen. Wenn diese Erweiterung nicht zuerst installiert wird)

Ich hoffe es hilft.

21
M.A

In meinem Fall hatte es mit der Microsoft.Build.Bcl-Version zu tun. Meine Nuget-Paketversion war 1.0.21, aber meine Projektdateien zeigten immer noch auf Version 1.0.14

Also habe ich meine .csproj-Dateien geändert von:

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

zu:

 <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" />

Und der Build funktionierte wieder.

17
henkie14

Wenn Sie TFS verwenden

Entfernen Sie die Dateien NuGet.exe und NuGet.targets aus dem Ordner .nuget der Lösung. Stellen Sie sicher, dass die Dateien selbst auch aus dem Lösungsarbeitsbereich entfernt werden. Behalten Sie die Datei NuGet.Config bei, um das Hinzufügen von Paketen zur Quellcodeverwaltung zu umgehen.

Bearbeiten Sie jede Projektdatei (z. B. .csproj, .vbproj) in der Projektmappe und entfernen Sie alle Verweise auf die Datei NuGet.targets. Öffnen Sie die Projektdatei (en) im Editor Ihrer Wahl und entfernen Sie die folgenden Einstellungen:

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

Wenn Sie kein TFS verwenden

Entfernen Sie den Ordner .nuget aus Ihrer Lösung. Stellen Sie sicher, dass der Ordner selbst auch aus dem Lösungsarbeitsbereich entfernt wird.

Bearbeiten Sie jede Projektdatei (z. B. .csproj, .vbproj) in der Projektmappe und entfernen Sie alle Verweise auf die Datei NuGet.targets. Öffnen Sie die Projektdatei (en) im Editor Ihrer Wahl und entfernen Sie die folgenden Einstellungen:

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

Referenz: Migrieren von in MSBuild integrierten Lösungen zur Verwendung der automatischen Paketwiederherstellung

11
RAM

Ist es möglich, dass die Pakete im falschen Ordner wiederhergestellt wurden? Überprüfen Sie, ob die Pfade in den csproj-Dateien korrekt sind.

Wenn sie unterschiedlich sind, kann dies daran liegen, dass die Pakete jetzt an einem anderen Speicherort wiederhergestellt werden. Dies kann durch die Überprüfung einer NuGet.Config-Datei bei der Angabe eines Knotens wie folgt verursacht werden:

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

Die Pakete werden restauriert, indem die Projekte noch auf den alten Standort schauen.

6
psych

Ich hatte das gleiche Problem. In meinem Fall hat die Installation des Microsoft.Bcl.Build -Pakets das Problem behoben.

6
mheyman

Dies sind die Schritte, mit denen ich das Problem behoben habe:

So fügen Sie Ihrer Lösung Nuget-Pakete hinzu:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt (nicht auf die Lösung), auf das Sie Nuget-Pakete verweisen möchten.
  2. Wählen Sie: Nuget-Pakete verwalten
  3. Im Popup-Fenster haben Sie links drei Möglichkeiten. Wenn Sie Online> Microsoft & .NET wählen, können Sie den Microsoft ASP.NET Web API 2.2-Paket-Grouper installieren (oder welches Paket auch immer Sie benötigen - meins war dies).
  4. Klicken Sie nun mit der rechten Maustaste auf Ihre Lösung (nicht auf das Projekt) und wählen Sie Wiederherstellung von Nuget-Paketen aktivieren. Dadurch werden die Pakete beim Kompilieren automatisch heruntergeladen.
1
user4569838

Bei mir hat es funktioniert, als ich gerade einen .nuget-Ordner von einer funktionierenden Lösung in die vorhandene kopiert und auf den Inhalt verwiesen habe!

1
meJustAndrew

Entfernt unter den Zeilen in der .csproj-Datei

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

Das Bearbeiten von .sln und .csproj ist nicht immer so einfach oder wünschenswert. Sobald Sie die Fehlerliste erhalten, können Sie sehen, bei welchen Projekten Pakete fehlen (außerdem gibt der Knoten Verweise normalerweise an, dass Assemblys fehlen, es sei denn, es handelt sich bei Paketen um Quellcode, Ressourcen, Bilder oder nur um textbasierte Pakete).

Das Entfernen und Hinzufügen der Pakete ist nur dann sinnvoll, wenn Sie die neueste Version des Pakets verwenden. Seien Sie ansonsten auf Überraschungen gefasst, die nicht immer angenehm sind.

Wenn das Paket beispielsweise EntityFramework ist, erhalten Sie in der NuGet-Galerie die neueste Version, die zum Zeitpunkt des Schreibens dieses Kommentars 6.1. ist.

Der sicherste Weg, mit der Situation umzugehen, ist es also, die fehlenden Pakete nacheinander wiederherzustellen. Ja, ein bisschen schmerzhafte Übung, aber die Jagd nach subtilen Fehlern aufgrund unterschiedlicher Paketversionen ist vielleicht viel unangenehmer.

Nachdem dies gesagt wurde und EntityFramework das fehlende Paket sein soll, können Sie den folgenden Befehl in der Package-Manager-Konsole ausgeben:

PM> Install-Package EntityFramework -Version 6.0.1 

Dadurch wird die richtige Version installiert, d. H. 6.0.1, die in packages.config angegeben ist:

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

Ich hatte das gleiche Problem, als ich die Klassenbibliothek in meiner MVC-Webanwendung referenzierte.

das Problem war die Nichtübereinstimmung der Versionsnummer des Nuget-Pakets zwischen zwei Projekten.

zb: meine klassenbibliothek hatte log4net von 1.2.3 aber meine webapp hatte 1.2.6

fix: Stellen Sie sicher, dass beide Projekte dieselbe Versionsnummer haben, auf die verwiesen wird.

0
Srini

Eine Lösung besteht darin, Folgendes aus der .csproj-Datei zu entfernen:

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

Dieses Projekt verweist auf NuGet-Pakete, die auf diesem Computer fehlen. Aktivieren Sie NuGet Package Restore, um sie herunterzuladen. Weitere Informationen finden Sie unter http://go.Microsoft.com/fwlink/?LinkID=322105 . Die fehlende Datei ist {0}.

0
Umar Khaliq