现有项目上缺少文件NuGet.targets

时间:2019-01-17 11:40:30

标签: visual-studio-2017 nuget

场景是:
1.创建了一个新的解决方案
2.启用下载缺少的软件包
3.将项目添加到已经存在并且依赖于nuget包的解决方案
4.构建解决方案会产生错误:

... The missing file is <solution folder>\.nuget\NuGet.targets.

为什么?有什么遗漏吗?

我在Windows 10上使用Visual Studio 2017 Pro

我所有的搜索都回答了有关创建新解决方案并添加依赖于nuget包的新项目的情况,这是可以的,但是当有现有项目时,什么都没有。

1 个答案:

答案 0 :(得分:1)

<solution folder>\.nuget\NuGet.targets是NuGet的Visual Studio扩展用来在Visual Studio 2010、2012和2013中添加的文件,右键单击解决方案并选择“启用NuGet软件包还原”。然后,它将在所有项目文件中添加导入,以导入目标文件。我最近是investigating a customer issue的一员,作为调查的一部分,我发现它进行了以下更改。在csproj顶部附近,它添加了以下内容:

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>

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

因此,问题在于您正在创建一个新的解决方案,但使用的是通过这种方式修改的现有项目文件。一种选择是编辑csrpoj文件并删除这些更改。除新解决方案外,另一种选择是创建新项目,然后复制所有代码和内容文件。

唯一的缺点是,如果您在CI服务器上构建并使用packages.config,则构建脚本需要运行nuget.exe restore,而使用NuGet.targets的项目则可以构建解决方案,而msbuild将执行nuget restore如所须。不再使用NuGet.targets的优点之一是,还原整个解决方案要比逐个项目还原要快。即使在VS2010,VS2012和VS2013中,Visual Studio也会自动还原生成的程序包,因此,即使您使用的是旧版本的Visual Studio,我个人也不鼓励使用此功能。在我看来,仅一步一步减少构建脚本的好处就不值得它带来的问题。