visual-studio-2017 - 现有项目中缺少文件 NuGet.targets
问题描述
场景是:
1. 创建了一个新的解决方案
2. 启用下载缺少的包
3. 将项目添加到已经存在并依赖于 nuget 包
的解决方案 4. 构建解决方案会产生错误:
... The missing file is <solution folder>\.nuget\NuGet.targets.
为什么?有什么遗漏吗?
我在 Windows 10 上使用 Visual Studio 2017 Pro
我所有的搜索都回答了创建一个新解决方案并添加一个依赖于 nuget 包的新项目的场景,这没关系,但是当有一个现有项目时,什么都没有。
解决方案
<solution folder>\.nuget\NuGet.targets
当您右键单击解决方案并选择“启用 NuGet 包还原”时,NuGet 的 Visual Studio 扩展用于在 Visual Studio 2010、2012 和 2013 中添加的文件。然后它将在您的所有项目文件中添加一个导入以导入目标文件。我最近正在调查一个客户问题,作为调查的一部分,我发现它进行了以下更改。在 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 的一个优点是还原整个解决方案比逐个项目还原更快。Visual Studio 会在构建时自动恢复包,即使在 VS2010、VS2012 和 VS2013 中也是如此,因此我个人不鼓励使用此功能,即使您使用那些旧版本的 Visual Studio。在我看来,将构建脚本减少一步的好处不值得它带来的问题。
推荐阅读
- javascript - 如何使用 Yarn 在集群模式下使用 pm2 启动 next.js 应用程序?
- javascript - JavaScript 按数组的所有值过滤
- android-studio - android崩溃错误:java.lang.IllegalStateException
- amazon-web-services - 关于 aws athena 中伯努利样本大小的问题
- java - ExecutorService 不起作用,但单独创建线程起作用
- sql-server - 是否可以通过 Amazon RDS SQL Server 表上的触发器命中终端节点?
- typescript - 如何拥有基于不同返回类型的输入对象?
- c# - 如何跟踪 EF Core 中的身份更改?
- javascript - React useImperativeHandle 和 forwardRef 被设置,引用似乎没有更新
- swift - 从 Firebase 下载文件 - 错误域 = FIRStorageErrorDomain 代码 = -13000 - Swift