【问题标题】:Package restore failed. Rolling back package changes in .Net Core Web API包还原失败。回滚 .Net Core Web API 中的包更改
【发布时间】:2021-10-20 20:26:57
【问题描述】:

我正在开发一个 .Net Core 3.1 Web API 项目。我想添加一个API Controller using Entity Framework。但它不断产生错误。它说,“运行所选代码生成器时出错:包还原失败。正在回滚包更改。”

我也在 3.1 版下安装了 NuGet 包。我尝试清除所有 NuGet 缓存,但没有奏效。 我怎样才能解决这个问题?请帮忙!

【问题讨论】:

    标签: visual-studio-2019 asp.net-core-webapi asp.net-core-3.1 nuget-package-restore asp.net-apicontroller


    【解决方案1】:

    在与项目中的代码和配置进行比较后,项目中似乎没有错误,因此 OP 尝试创建一个新的 .net 5 项目,这一次一切都表现得很好。也许它可以作为类似问题的提示,即更改项目框架的版本。

    ================================================ ====

    谷歌错误消息我真的发现高投票的答案要求清除 Nuget 缓存,但正如你所说,它不起作用。恐怕我需要您的帮助,您可以检查一下您和我之间的差异在哪里,因为它对我有用。顺便说一句,使用v3.1.18 Microsoft.EntityFrameworkCore.SqlServer 也对我有用,所以我猜这可能是您的 Visual Studio 客户端造成的。您可以重新安装客户端。

    我新建了一个asp.net core 3.1 api项目,并安装了ef:

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.9" />
      </ItemGroup>
    </Project>
    

    在启动时,我修改了我的 ConfigureService 方法:

    public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllers();
                services.AddDbContext<LocaldbContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("Localtest")));
            }
    

    这是一个测试控制器:

    using WebApplication1.Data;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using System;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace WebApplication1.Controllers
    {
        public class LocaldbController : Controller
        {
            private readonly LocaldbContext _context;
            public LocaldbController(LocaldbContext context)
            {
                _context = context;
            }
    
            [HttpGet("/getUser")]
            public async Task<IActionResult> Index(string searchString)
            {
                var users = from m in _context.user
                            select m;
    
                if (!String.IsNullOrEmpty(searchString))
                {
                    users = users.Where(s => s.user_name.Contains(searchString));
                }
                return Ok(await users.ToListAsync());
            }
        }
    }
    

    和 Dbcontext 文件:

    using WebApplication1.Models;
    using Microsoft.EntityFrameworkCore;
    
    namespace WebApplication1.Data
    {
        public class LocaldbContext: DbContext
        {
            public LocaldbContext(DbContextOptions<LocaldbContext> options) : base(options){}
    
            public DbSet<LocalMallUser> user { get; set; }
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity<LocalMallUser>().ToTable("MallUser");
            }
        }
    }
    

    【讨论】:

    • 非常感谢您的建议。我重新检查了所有文件、控制器和方法,它们的配置正确。我只是无法弄清楚为什么错误仍然不断弹出。所以我只是将.Net Core 版本切换到v5,清除所有NuGet 缓存并再次尝试。它奏效了。现在继续v5
    • @KDeven 感谢您的回复,看来您将.Net Core 3.1 project 更改为.Net 5 project 使问题消失了。听起来仍然是与 SDK 版本相关的问题。无论如何,解决的问题是好的 :) 我会在我的帖子中更新你的尝试,你能接受它作为结束这个案例的答案吗?感谢您为此付出的努力。
    猜你喜欢
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多