错误:包还原失败
Posted
技术标签:
【中文标题】错误:包还原失败【英文标题】:Error : Package restore failed 【发布时间】:2017-11-14 12:50:47 【问题描述】:我正在尝试将控制器添加到我在 Asp.net Core 项目中的解决方案中。
这样做时我收到此错误。
我在为控制器添加最小依赖项和完全依赖项时收到相同的消息。
请帮我解决这个问题。提前致谢。
【问题讨论】:
查看输出面板,一定有更多关于错误的具体信息。 它什么也没显示 尝试提供有关该问题的更多详细信息。仅向我们展示错误的图像不会给您太多帮助... 以下许多答案在当时都是正确的。虽然概念仍然存在,但 .Net Cor 3.1 与 .Net 5.0 Entity Framework 的细节似乎有很大不同... 【参考方案1】:我也面临这个问题。
请按此步骤,
清理您的解决方案 打开 Nuget 管理器 查看此版本Microsoft.EntityFrameworkCore(我使用的是5.0.8) 查看此版本Microsoft.EntityFrameworkCore.Design(我使用的是5.0.8) 查看此版本Microsoft.EntityFrameworkCore.Tools(我使用的是5.0.8) 查看这个版本Microsoft.EntityFrameworkCore.SqlServer(我用的是5.0.8) 查看此版本Microsoft.VisualStudio.Web.CodeGeneration.Design(我使用的是5.0.2) 之后重建您的解决方案并创建脚手架控制器【讨论】:
【参考方案2】:当我尝试搭建身份模板时,我也遇到了同样的错误。我通过更新两个主要关注项目的 nuget 包来解决这个问题(我的意思是这两个项目与我要实施的项目有关)。
【讨论】:
【参考方案3】:尝试使用 EF 为使用 Net5.0
的 MVC 项目添加带有视图的 MVC 控制器。
使用以下NuGet 包的特定版本对我有用,而对于Microsoft.EntityFrameworkCore.SqlServer
和Microsoft.EntityFrameworkCore.Tools
,使用低于Microsoft.EntityFrameworkCore
的版本解决了问题,这些包在MVC 中被引用项目。
正确的包是:
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.7" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
</ItemGroup>
【讨论】:
【参考方案4】:清理解决方案向我显示需要更新 NuGet 包的错误!我更新了它们并构建了解决方案。构建成功,我能够创建控制器类。
【讨论】:
【参考方案5】:我在创建新的“身份”脚手架项目时遇到了同样的问题。
我设法通过删除 csproj 文件中 <ItemGroup>
标记中的所有内容并运行代码生成器来完成这项工作。然后生成器安装它需要的包。
【讨论】:
【参考方案6】:我刚刚将 EntityFrameworkCore 从版本 3.1.10 更新到 3.1.13,它解决了这个问题。我的项目文件如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.13" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.13">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.5" />
</ItemGroup>
</Project>
【讨论】:
【参考方案7】:如果没有适合您的答案,请尝试从命令行运行代码生成器。
对于我的 sln 有多个项目,使用 net 5 和一些 5.0.5 和一些 5.0.2 的 NuGet 包,只有通过命令行的代码生成器才能工作。确保已安装。
或安装通过以下命令
dotnet tool install -g dotnet-aspnet-codegenerator
或更新通过以下命令
dotnet tool update -g dotnet-aspnet-codegenerator
基本的代码生成器命令可以在here找到
其中一些是:
Generator Operation
area Scaffolds an Area
controller Scaffolds a controller
identity Scaffolds Identity
razorpage Scaffolds Razor Pages
view Scaffolds a view
例如:
dotnet-aspnet-codegenerator identity --dbContext MyDbContextClass
要获得帮助:
dotnet-aspnet-codegenerator [YourGenerator] -h
【讨论】:
谢谢!唯一对我有用的解决方案。参数与您的示例不同。什么对我有用:dotnet-aspnet-codegenerator razorpage -dc MyContext -m MyModel -udl -outDir area/MyModel【参考方案8】:我遇到了 Blazor 服务器应用程序版本 5.0.5 和 Microsoft Identity 脚手架的问题。 CodeGeneration.Design 包的最高可用版本是 5.0.2,所以我将其他 Microsoft 包(特别是 EntityFramework)降级到 5.0.2 并解决了问题。
【讨论】:
我在 .Net Core 5.0 Razon pages 应用程序中解决了同样的问题。【参考方案9】:我在 net5.0 中遇到了这个问题,特别是针对某些依赖项的 5.0.5 版本。我将我的 nuget 包从 5.0.5 降级到 5.0.4:
"Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.4"
"Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.4"
"Microsoft.AspNetCore.Identity.UI" Version="5.0.4"
"Microsoft.EntityFrameworkCore.Tools" Version="5.0.4"
【讨论】:
试过但没有用,通过命令行运行脚手架与不匹配的库一起工作 在 .net 5 项目中运行完整的包更新对我有用 我尝试了上述所有解决方案。这是使用 .NET 5 为我工作的那个。我想知道使用 .NET 5 的较小版本是否值得拥有使用 EF 构建控制器的能力。 我刚刚降级了一个版本,它工作了.. 谢谢【参考方案10】:我有同样的错误。并更新 NuGet 包(工具 -> Nuget 包管理器 -> 管理解决方案的 NuGet 包 -> 单击已安装。 您需要选择带有通知依赖关系的版本。
例如我的选项很好:
Microsoft.AspNetCore.Identity.EntityFramework Core 3.1.12 版
Microsoft.EntityFrameworkCore.Tools 3.1.12 版
Microsoft.EntityFrameworkCore.SqlServer 版本 3.1.12
Microsoft.VisualStudio.Web.CodeGeneration.Design 3.1.5 版
【讨论】:
【参考方案11】:我在使用 Entity Framework 项目向 Core API 添加控制器时遇到了这个问题。我正在使用 VS 16.8.5 和最新的 EF 核心,版本 5.03。包含我的 DBContext 类的类引用了 EF 5.03。
我(最终!)在浏览 Nuget 时注意到各种代码生成包(我的 .csproj 文件中没有引用这些包,我认为是因为 ASP.Net 核心自 3.0 以来作为框架提供,但如果我错了,请纠正我某人!),特别是 Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCode 是 5.02。我没有碰我的 ASP.Net 项目,而是将其他 EF 项目降级到 5.02,它解决了问题。
【讨论】:
【参考方案12】:只需更新所有 Nuget 包、清洁解决方案和重建解决方案。它为我解决了问题。
【讨论】:
【参考方案13】:VS2019 [5.0]。
更新 NuGet 包(工具 -> Nuget 包管理器 -> 管理 解决方案的 NuGet 包 -> 单击 更新选项卡,全选 并运行更新。
解决方案 -> 清理
解决方案 -> 构建
创建一个控制器。
我尝试了所有方法,但上述方法对我有用
【讨论】:
【参考方案14】:如前所述,我从工具-> Nuget 包管理器-> 管理解决方案的NuGet 包-> 更新选项卡-> 全部更新中更新了所有NuGet 包。然后,我可以使用 EF 添加控制器并让 VS 生成关联的视图。
【讨论】:
【参考方案15】:问题是您的项目中安装了一些旧版本的 nuget pacakges,当您尝试搭建脚手架时,Asp.net 核心会尝试安装此时搭建脚手架所需的最新包 Asp.net 核心抛出这样的异常。
我建议你更新你的 nuget 包,而不是尝试使用 scafolding。
感谢和问候
【讨论】:
【参考方案16】:我的解决方案 -Vs2019所有nuget包升级
【讨论】:
【参考方案17】:只需从 Nuget 包管理器更新 NUGET 包。
【讨论】:
【参考方案18】:我在实体框架核心 sqlite nuget 包方面遇到了类似的问题。我安装了 sqlite 和 sqlite 核心包解决了这个问题。可能缺少一个需要的包裹。还要确保 SQL Server 和服务器代理正在运行。检查SQL Server 配置 > SQL Server 服务 > 右键单击SQL Server 或服务器代理并 启动服务,然后重新启动服务器。猜猜这可能对某人有帮助
【讨论】:
【参考方案19】:我已经通过更新两个文件解决了这个问题
Microsoft.VisualStudio.Web.CodeGeneration 和 Microsoft.VisualStudio.Web.CodeGeneration.Design
。它的版本应该与应用程序中的其他包版本匹配。
【讨论】:
【参考方案20】:在我无法搭建 IdentityFramework 之后为我解决的问题是由
-
检查 VS2019 的更新。
更新 NuGet 包(工具 -> Nuget 包管理器 -> 管理解决方案的 NuGet 包 -> 单击更新选项卡,全选并运行更新。
重试脚手架标识
【讨论】:
【参考方案21】:我正在运行 .NET Core(和 Entity Framework Core)3.1.x。
我得到了这个确切的错误,并尝试更新此处答案中已经提到的所有 nuget 包和其他相关解决方案。
问题只是我的数据库服务器没有运行(它在本地 VM 上运行)。换句话说,“添加控制器...”窗口中提到的我的数据库上下文(即ApplicationDbContext
)无法访问数据库。一旦我启动了数据库服务器,我的脚手架就毫无问题地创建了。
还要记住,控制器和视图引用的模型/类(即表)尚未创建(我还没有运行 add-migration)。所以,它只需要数据库连接。
这是一种愚蠢(显而易见?)的解决方案,但在查看“包还原失败”错误消息时非常具有误导性。
【讨论】:
【参考方案22】:有同样的问题,但更新所有 NuGet 包已解决问题。 右键单击你的项目名称>文件 -> 管理 NuGet 包 -> 更新 -> 选择所有包 -> 更新
【讨论】:
【参考方案23】:我在制作新控制器时遇到了同样的错误。 我已经这样修好了。 实际上,VS只有离线包源,无法解析需要的包。
添加在线参考: 工具 > nuget 包管理器 > 包管理器设置 > 包源
添加来源:https://api.nuget.org/v3/index.json
【讨论】:
这个对我有用。【参考方案24】:遇到完全相同的问题,在我的情况下 CodeGenerator 丢失了
我已将此项目添加到 .csproj 中的 ItemGroup 中
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.0" />
【讨论】:
【参考方案25】:我最近遇到了同样的问题。
我最终通过查看我的解决方案中包含的每个单独的 .csproj 文件并修复了包含的所有 Microsoft 库版本来解决了这个问题。
我将我引用的元包从“Microsoft.AspNetCore.All”更改为“Microsoft.AspNetCore.App”,然后我在 nuget 上为“App”包加载了引用列表,并删除了对已包含在元包中。
然后我确保我修复了任何未完成的包的版本以匹配项目自动选择的元包的版本,即在我的情况下为 2.2.0。
让我感到困惑的是,如果您的解决方案中包含多个项目,您需要确保它们引用相同的元包,就好像您的解决方案中包含的项目之间存在版本不匹配一样,您也会遇到此问题。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.5" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.3" />
</ItemGroup>
改成这个了。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.2.0" />
</ItemGroup>
【讨论】:
成功了。 dotnet restore 不起作用,清除组件缓存不起作用。虽然我必须在搭建脚手架后改回 PackageReferences,因为我遇到了一些 UI 异常(但它似乎不会影响构建) 您是否包含了 CodeGeneration 包?【参考方案26】:我所要做的就是打开我的 Web 项目的属性并将 TargetFramework 从 2.1 更改为 2.2。或者匹配您的业务和对象层使用的任何版本的框架。
【讨论】:
【参考方案27】:我也有这个问题。 “Add Controller>API Controller with actions, using Entity Framework”会给出“Package Restore Failed”错误。
正如 Anish 所说,这似乎是由于软件包版本未对齐造成的。我能够使用“管理用于解决方案的 NUGET 包”解决此问题,然后执行“全部更新”。这将我的 AspNetCore 版本设置为 2.1.5 并解决了我的“包还原失败”错误,但随后导致另一个错误“未找到 NETCore 版本 2.1.5”。显然,脚手架代码生成器需要 AspNetCore 和 NETCore 版本同步,所以我从 Microsoft 下载手动下载并安装了 NETCore 版本 2.1.5。这行得通,我终于能够生成控制器了。
【讨论】:
我现在面临的同样问题被您的回答解决了:“脚手架代码生成器需要 AspNetCore 和 NETCore 版本同步” 我的情况是,我必须将 Microsoft.* nuget 包从 3.1.9 升级到 3.1.10 才能使脚手架工作。 感谢分享,我用同样的方法解决了。对我来说是VS 2019。右键单击解决方案->管理Nuget包以获取解决方案->转到更新选项卡->全选您要更新的包(我全选)-> 更新。然后我能够添加控制器-> Api-> EntityFramework 方式;以前是错误的! 更新所有 nuget 包对我有用【参考方案28】:我也遇到了同样的问题,这是我解决问题的方法
运行所选代码生成时出错,“包还原失败。为 web 回滚包 canges'
1- 检查您的解决方案是否有多个项目,请检查他们的 Target Dot.net Framework。(在我的例子中,类库是 .Net Standard 1.6,Web 项目是 .NetCoreApp 1.0,我将其更改为 .NetCoreApp 1.1)
2- 拥有相同的框架后,清理网络项目,重建并添加新的控制器。
如果它成功,否则你可能会遇到另一个错误,例如
'运行代码生成器时出错:'找不到与命令“dotnet-aspnet-codegenerator”匹配的可执行文件'
如果你有 project.json 文件打开它,否则在记事本中打开 .csproj.user 项目,请添加以下内容 请注意,根据您的 .net 版本,您可能有不同的版本号。
如果您的项目中生成了ScaffoldingReadMe.txt文件,您可以在该文件中找到说明
【讨论】:
以上是关于错误:包还原失败的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 Visual Studio 中的“NuGet 包还原失败”?
NuGet 包安装失败“包还原失败。回滚 <xamarin.android> 的包更改”
Team Foundation Service 构建在 NuGet 包还原时失败
在 Ubuntu 20.04 上使用远程证书的 Nuget 包还原失败无效
另一个“运行所选代码生成器时出错:”和“包还原失败。回滚包更改“(解决方案名称)
安装包时出错(安装失败,将 ./composer.json 还原为其原始内容。)(Laravel 管理包 - Voyager)[重复]