Assets file project.assets.json未找到。运行NuGet包还原。

541
我试着使用 nopCommerce(基于 .NET Core 开发),但在运行该项目时,遇到了 52 个错误,告诉我要运行一个 NuGet 包还原。报错信息为:“Assets file ~\obj\project.assets.json' not found. Run a NuGet package restore to generate this file. Nop.Web.MVC.Testsote”。当我右键单击解决方案并选择还原 NuGet 包时,出现以下信息:“All packages are already installed and there is nothing to restore.”。但这些 52 个错误仍然存在,并且在“工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包”中,该解决方案上没有安装任何内容。同时,我最近将 VS2017 升级到了 15.5.4 版本。

您是否已经同意让 NuGet 进行还原操作?请前往“工具” -> “选项”,搜索 NuGet 并勾选“允许 NuGet...”选项。 - imps
34
如果有人在使用Mac电脑时遇到这个问题,可以通过移除代码库路径中的空格来解决(这些空格是在进行git pull操作时创建的):将"My%20Project"修改为"MyProject"。 - David Hague
2
@DavidHague 谢谢你关于在Mac上修复带空格的存储库路径的提示 - 那是我的问题 - 谢谢! - AVH
2
@DavidHague 节省了很多时间。谢谢你。空间是问题所在。 - Prabhat Ranjan
右键点击解决方案,选择“还原 NuGet 包”对我很有效。 - Nick Westgate
显示剩余6条评论
41个回答

861

要从工具 > NuGet程序包管理器 > 程序包管理器控制台中修复此错误,只需运行:

dotnet restore

出现错误是因为 dotnet cli 最初没有创建所有必需的文件。执行 dotnet restore 命令可以添加所需的文件。


39
这也是构建服务器的解决方法。在普通的 NuGet 恢复之后添加了一个命令行步骤来运行 "dotnet restore"。 - Mark
38
你也可以使用MSBuild来完成这个任务:msbuild MySolution.sln /t:Restore。 - Der_Meister
6
@Der_Meister的解决方案对我有用,但是我不得不构建两次解决方案(两个独立的构建步骤)。首先使用/t:Restore选项构建,然后再次构建时去掉该选项。 - Michael
27
@Michael,请尝试运行以下命令:msbuild MySolution.sln /t:Restore;Build。该命令会还原并构建你的解决方案。 - Der_Meister
18
如果您有多个解决方案文件,则需要执行 dotnet restore solutionfilename.sln - Ed Harrod
显示剩余13条评论

218

在我的情况下,错误是GIT仓库的问题。它的名称中有空格,导致我的项目无法还原。

如果这也是你的问题,只需在克隆时重命名GIT仓库即可。

git clone http://Your%20Project%20With%20Spaces newprojectname

8
这个答案应该放在帖子开头而不是结尾。解决了我的问题。 - CodeWarrior
5
在我的情况下,我只是将物理文件夹的名称更改,通过去除%20并用普通空格替换它,现在一切都运行良好。 - hosam hemaily
1
文件夹名称中的%20是问题所在。一直很困惑为什么会失败。非常感谢! - NiallMitch14
1
同意,这也是我的问题(和解决方案)。此外,在带有“%20”的文件夹中创建新的.NET Core MVC项目还无法正确创建项目文件本身(例如,我不得不手动将创建的Model,View和Controller文件夹包含在项目中)。这应该是我第一个线索,表明项目创建未正确完成。 - Céryl Wiltink
1
这就是问题所在——似乎TFS/Azure DevOps中允许使用空格。 - lohithbb
当你为大型组织工作时,通常不会让你选择项目名称。通常是另一个团队(很可能不是开发人员)使用空格选择这些名称。如果你有权限创建/修改项目名称,请尽管去做,但像我这种情况下你没有这个权利,那么上述解决方案就可以运用。 - Sebastian Castaldi

85

如果 'dotnet restore' 无法正常工作,可以尝试以下步骤:

  1. 打开 Visual Studio >> 工具 >> 选项 >> Nuget 管理器 >> 包源。
  2. 取消勾选任何第三方包源。
  3. 重新构建解决方案。

6
最近我在Identity Server的快速入门#1中遇到了这个问题:使用客户端凭据保护API,上述解决方案对我很有效。 - Tharindu Jayasinghe
1
如果您需要在AzureDevOps中使用第三方包源或自己的组织,则按照此说明进行操作:https://learn.microsoft.com/en-us/azure/devops/artifacts/nuget/nuget-exe?view=azure-devops - hB0
2
在我的情况下,有一个 Microsoft 离线包的条目,似乎是无效的。花了很长时间才发现这一点。谢谢。 - Robert S.
1
是的,我从程序包管理器中添加了一些自定义的 NuGet 引用,因此问题得以解决。现在它可以正常工作了。 - Hemalatha M.R.
@prisan 看起来我的评论触及了你的痛处,让你感到冒犯并盲目地忽略了这确实是解决方案的事实。此外,你显然没有读完第一句话之后的内容。 - computrius
显示剩余5条评论

72
对于在Azure DevOps / VSTS环境中遇到类似问题的人,遇到类似消息的人:
C:\Program Files\dotnet\sdk\2.2.104\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(208,5): Error NETSDK1004: Assets file '...\obj\project.assets.json' not found. Run a NuGet package restore to generate this file 在构建解决方案中的MSBuild参数中添加/t:Restore。
在Azure DevOps构建流水线中,在此处添加/t:Restore。

enter image description here


1
可能是个罕见的情况,但我还得从我的.csproj中删除一个属性... 如果存在,请删除以下内容: <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>... 现在世界又恢复正常了。 - Tyler
1
只想承认,在使用 Git 的离线 ADO 中,这仍然适用于今天。我花了数小时来解决 VS 2022 .Net 7 构建管道的问题。这解决了我的问题-因此,从一位 Swiftie 至另一位(我有一个14岁的女儿,显然是必需的),谢谢你。 - Donny McCoy
这似乎修复了我的流水线,但是接着我得到了一个空的工件。结果发现最近在解决方案中添加了一个 SSRS 项目,但构建服务器还没有支持 SSRS。 - Design.Garden
1
这为我解决了问题,谢谢。我已经添加了一个图片到解决方案中,使得在哪里添加构建参数变得清晰明了。 - robnick

52

对我来说,关闭和重新打开Visual Studio已解决这个问题,一旦我确保NuGet包已像其他答案中发布的那样被还原。

编辑:有时仅尝试重新构建即可解决该问题。


做了dotnet restore之后,我也不敢相信这个方法对我也起作用了。 - Gaspa79
我在工作局域网上遇到了一些独立的连接问题,这对NuGet造成了阻碍。重新启动我的电脑解决了这个问题! - Neo
这并不是一个真正的答案,因为有时你使用CLI工具来“获取”和“构建”,而不打开VS。我知道为什么在VS中可以工作-因为VS会自动解决项目依赖关系。 - T.S.
@T.S. 这个问题被标记为 "Visual Studio 2017",所以我认为这就是一个答案。不过你提出了一个有趣的观点,即问题在于 VS 解析依赖项。如果您有更多关于出错原因的信息,我相信它会非常有趣:) - OutstandingBill
+1。你抓住我了!使用VS,哦好吧。他的15.5版本有漏洞。我认为15.5/15.6在引用解析方面存在许多问题。现在,这里是答案https://dev59.com/1FYM5IYBdhLWcg3wvCD-#58548856 - T.S.

25

在我进行“dotnet restore”操作时,仍然出现错误。

我尝试了以下步骤:

1 工具 -> NuGet 包管理器 -> 包管理器设置 -> 点击“清除所有NuGet缓存”

2 dotnet restore

问题得到解决。


下次发生这种情况,我会尝试这个方法。这可能比我的方法(关闭并重新打开VS),对我来说通常需要很长时间,更好。 - OutstandingBill
可以在包管理器控制台中运行 dotnet restore - Arundale Ramanathan
尝试了其他解决方案,但这个对我有效。 - Irshad Faras
谢谢Speed,直到我尝试了你的建议,这个帖子中的所有其他建议都没有起作用。 - AaronC

14

在 Visual Studio 2017 中,请按照以下步骤:

1)选择“工具”=>“选项”=>“NuGet 包管理器”=>“程序包源”,然后取消选中Microsoft Visual Studio 离线包选项。 enter image description here

2)现在打开“工具”=>“NuGet 包管理器”=>“程序包管理器控制台”。 3) 在 PM 中执行命令>dotnet restore。

希望它能起作用...


这对我有用。谢谢! - Ε Г И І И О

11

之前已经提到过,但我想再次强调路径中任何地方都不要有空格的重要性!这就是困扰我的问题。已经警告过你了。


这是帮助我的方法 - 我在项目路径中添加了空格,删除后问题得到解决! - Mark

10
如果此错误是作为Azure DevOps(TFS)中构建的一部分发生的,并且您的构建已经有了一个NuGet restore任务,那么这个错误可能表明NuGet restore任务无法恢复所有软件包,特别是如果您使用自定义软件包源(例如内部NuGet服务器)。在MSBuild参数中添加/t:Restore;Build似乎是解决错误的一种方式,但这会要求MSBuild执行额外的NuGet restore操作。我相信这是成功的,因为MSBuild使用Visual Studio中配置的自定义软件包源。更好的解决方案是修复NuGet restore任务。
为NuGet restore任务配置自定义软件包源的方法:
  1. 创建一个列出所有软件包源(Microsoft Visual Studio离线软件包、nuget.org和您的自定义软件包源)的NuGet.config文件,并将其添加到源代码控制中。
  2. 在Nuget restore任务下,选择使用的Feed:选项我的NuGet.config中的Feeds
  3. 提供NuGet.config的路径。
  4. 从MSBuild任务中删除/t:Restore;Build选项。
此处提供了更多信息。

9

通过在MSBuild参数中添加/t:Restore;Build来解决问题。


对我来说,使用/t:Restore;Build无法正常工作,但是/t:Restore /t:Build可以。不过还是谢谢你的回答,帮了我很多! - R13mus
这已经被说过了。 - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接