J'ai une application ASP.NET MVC5 qui fonctionnait hier et je reçois maintenant cette erreur lorsque j'essaie de générer:
Ce projet fait référence aux packages NuGet manquants sur cet ordinateur.
J'ai les deux options cochées qui permettent à Nuget de télécharger et d'installer automatiquement les paquets manquants cochés/activés. J'ai également essayé de supprimer tous les fichiers du dossier des paquets, puis je les ai téléchargés à nouveau par Nuget. De plus, lorsque j'ouvre Nuget et que je recherche des mises à jour, cela signifie qu'aucune d'entre elles ne doit être installée. Je ne vois pas comment faire pour aller au-delà de cette question incroyablement agaçante.
Dans mon cas, j'ai dû supprimer les éléments suivants du fichier .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>
En fait, dans cet extrait, vous pouvez voir d'où vient le message d'erreur.
Je convertissais de la restauration du package MSBuild-Integrated en la restauration automatique du package ( http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore )
Une solution serait de supprimer du fichier .csproj ce qui suit:
<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>
Comment?
Dans mon cas, cela est arrivé après que j'ai déplacé mon dossier de solution d'un emplacement à un autre, que je l'ait un peu réorganisé et que, par la même occasion, sa structure de dossiers relative ait changé.
Je devais donc éditer toutes les entrées similaires à la suivante dans mon fichier _.csproj
_ de
_ <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')" />
_
à
_ <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')" />
_
(Notez le changement de ..\packages\
à packages\
. Il pourrait s'agir d'une structure relative différente dans votre cas, mais vous avez l'idée.)
Je résous facilement ce problème en cliquant avec le bouton droit de la souris sur ma solution, puis en cliquant sur l'option Activer la restauration du package NuGet
(P.S: Assurez-vous que vous disposez de Nuget Install From Tools -> Extensions et mises à jour -> Nuget Package Manager pour Visual Studio 2013. Sinon, installez d'abord cette extension.)
J'espère que ça aide.
Dans mon cas, il s'agissait de la version Microsoft.Build.Bcl. La version de mon paquet nuget était 1.0.21, mais mes fichiers de projet pointaient toujours vers la version 1.0.14
J'ai donc changé mes fichiers .csproj à partir de:
<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>
à:
<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" />
Et la construction fonctionnait à nouveau.
Si vous utilisez TFS
Supprimez les fichiers NuGet.exe
et NuGet.targets
du dossier .nuget
de la solution. Assurez-vous que les fichiers eux-mêmes sont également supprimés de l'espace de travail de la solution. Conservez le fichier NuGet.Config
pour continuer à éviter l'ajout de packages au contrôle de source.
Modifiez chaque fichier de projet (par exemple, .csproj, .vbproj) dans la solution et supprimez toute référence au fichier NuGet.targets
. Ouvrez le ou les fichiers du projet dans l'éditeur de votre choix et supprimez les paramètres suivants:
<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>
Si vous n'utilisez pas TFS
Supprimez le dossier .nuget
de votre solution. Assurez-vous que le dossier lui-même est également supprimé de l'espace de travail de la solution.
Modifiez chaque fichier de projet (par exemple, .csproj, .vbproj) dans la solution et supprimez toute référence au fichier NuGet.targets
. Ouvrez le ou les fichiers du projet dans l'éditeur de votre choix et supprimez les paramètres suivants:
<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>
Référence: Migration des solutions MSBuild-Integrated pour utiliser la restauration automatique des packages
Est-il possible que les packages aient été restaurés dans le mauvais dossier? Vérifiez que les chemins dans les fichiers csproj sont corrects.
S'ils sont différents, cela peut être causé par la restauration des packages à un emplacement différent. Cela pourrait être causé par un fichier NuGet.Config en cours de vérification en spécifiant un nœud comme celui-ci:
<add key="repositoryPath" value="..\..\Packages" />
Les paquetages sont en cours de restauration, les projets regardant toujours à l’ancien emplacement.
J'ai eu le même problème. Dans mon cas, l'installation du package Microsoft.Bcl.Build a résolu le problème.
Voici les étapes que j'ai utilisées pour résoudre le problème:
Pour ajouter des packages Nuget à votre solution:
Pour moi, cela a fonctionné puisque je venais de copier un dossier .nuget d’une solution opérationnelle à la solution existante et de référencer son contenu!
Supprimé sous les lignes du fichier .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>
Éditer les fichiers .sln et .csproj n’est pas toujours aussi simple ni souhaitable. Une fois que vous obtenez la liste des erreurs, vous pouvez voir quels projets ont des packages manquants (également, le nœud Références indique généralement qu'il manque des assemblys, à moins que les packages ne soient du code source, des ressources, des images ou uniquement des versions textuelles).
Supprimer puis ajouter les packages n'est pas une bonne idée, sauf si vous utilisez la dernière version du package. Sinon préparez-vous à des surprises, pas toujours agréables.
Si, par exemple, le paquet est EntityFramework, alors dans la galerie NuGet, vous obtenez la dernière version qui, au moment de la rédaction de ce commentaire, est 6.1..
Donc, le moyen le plus sûr de gérer la situation est de restaurer les paquets manquants un à un. Oui, un exercice un peu pénible, mais la poursuite de bugs subtils dus à une version différente du paquet peut être beaucoup plus désagréable.
Ceci dit, et laissez à nouveau EntityFramework être le paquet manquant, vous pouvez exécuter la commande suivante dans la console Package-Manager Console:
PM> Install-Package EntityFramework -Version 6.0.1
Ceci installera la version correcte, c'est-à-dire 6.0.1, c'est-à-dire celle spécifiée dans packages.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.0.1" targetFramework="net451" />
</packages>
J'ai eu le même problème lorsque je référence la bibliothèque de classes dans mon application Web MVC,
le problème était l'inadéquation du numéro de version du paquet de nuget entre deux projets.
ex: ma bibliothèque de classe avait log4net de 1.2.3 mais ma webapp avait 1.2.6
correctif: assurez-vous simplement que le projet a le même numéro de version référencé.
Une solution serait de supprimer du fichier .csproj ce qui suit:
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
Ce projet fait référence aux packages NuGet manquants sur cet ordinateur. Activez la restauration du paquet NuGet pour les télécharger. Pour plus d'informations, voir http://go.Microsoft.com/fwlink/?LinkID=322105 . Le fichier manquant est {0}.