<solution folder>\.nuget\NuGet.targets
est un fichier que l'extension Visual Studio de NuGet ajoutait dans Visual Studio 2010, 2012 et 2013 lorsque vous faisiez un clic droit sur la solution et que vous sélectionniez "Enable NuGet Package Restore". Il ajoute alors une importation dans tous vos fichiers de projet pour importer le fichier de cibles. J'ai récemment été enquêter sur un problème rencontré par un client et, dans le cadre de cette enquête, j'ai constaté qu'il avait apporté les modifications suivantes. Vers le haut du csproj, il ajoute quelque chose comme ceci :
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>
et vers la fin du csproj, il ajoute quelque chose comme ceci :
<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>
Le problème est donc que vous créez une nouvelle solution, mais que vous utilisez des fichiers de projet existants qui ont été modifiés de cette manière. Une option consiste à éditer vos fichiers csrpoj et à supprimer ces modifications. Une autre option consiste à créer de nouveaux projets, en plus de la nouvelle solution, puis à copier tous vos fichiers de code et de contenu.
Le seul inconvénient est que si vous construisez sur un serveur CI et que vous utilisez packages.config, votre script de construction doit s'exécuter nuget.exe restore
alors que les projets qui utilisent NuGet.targets pourraient simplement construire la solution et msbuild exécuterait nuget restore si nécessaire. L'un des avantages de ne plus utiliser NuGet.targets est que la restauration de l'ensemble de la solution est plus rapide que la restauration projet par projet. Visual Studio restaure automatiquement les paquets lors de la construction, même dans VS2010, VS2012 et VS2013, donc personnellement je décourage l'utilisation de cette fonctionnalité, même si vous utilisez ces anciennes versions de Visual Studio. L'avantage de réduire votre script de construction d'une étape ne vaut pas les problèmes qu'elle entraîne, à mon avis.