如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

nig*_*2k1 2 c# asp.net-core-mvc .net-core asp.net-core asp.net-core-3.0

我正在遵循Microsoft 的迁移指南,但失败了。因此,相反,我使用 .NET 2.2 创建了一个新项目来建立一个干净的模板,然后尝试迁移到 .NET Core 3.0。但它又一次失败了。在Startup.cs,依赖注入找不到方法services.AddMvc()

看来我的代码仍然指的是 .NET 2.2 而不是 .NET 3.0。

如果我运行dotnet watch run,我会收到以下错误:

应用程序启动异常 System.InvalidOperationException:端点路由不支持“IApplicationBuilder.UseMvc(...)”。要使用 'IApplicationBuilder.UseMvc' 在 'ConfigureServices(...) 中设置 'MvcOptions.EnableEndpointRouting = false'。在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) 在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) 在 netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 在 E:\ testapp\netmig\Startup.cs:System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj,
在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2( IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.GenericService. StartAsync(CancellationToken cancellingToken) 未处理的异常。System.InvalidOperationException: 端点路由不支持 'IApplicationBuilder.UseMvc(... )'。要使用 'IApplicationBuilder.UseMvc' 在 'ConfigureServices(...) 中设置 'MvcOptions.EnableEndpointRouting = false'。在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) 在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) 在 netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 在 E:\ testapp\netmig\Startup.cs:System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder)的第 46 行活页夹、Object[] 参数、CultureInfo 文化)在'ConfigureServices(...) 中设置'MvcOptions.EnableEndpointRouting = false'。在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) 在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) 在 netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 在 E:\ testapp\netmig\Startup.cs:System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder)的第 46 行活页夹、Object[] 参数、CultureInfo 文化)在'ConfigureServices(...) 中设置'MvcOptions.EnableEndpointRouting = false'。在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) 在 Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) 在 netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) 在 E:\ testapp\netmig\Startup.cs:System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder)的第 46 行活页夹、Object[] 参数、CultureInfo 文化)
在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2( IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.GenericService.微软的 Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancelationToken) 的 StartAsync(CancellationToken cancelationToken)。Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token) at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost Program host) at Microsoft.netmig. Main(String[] args) in E:\testapp\netmig\Program.cs:line 18 watch : Exited with error code -532462766退出,错误代码 -532462766退出,错误代码 -532462766

我正在运行的完整代码可以在 GitHub 上找到。我的 .NET 信息:

dotnet --info .NET Core SDK(反映任何 global.json):版本:
3.0.100 提交:04339c3a26

运行时环境:操作系统名称:Windows 操作系统版本:10.0.18362 操作系统平台:Windows RID:win10-x64 基本路径:C:\Program Files\dotnet\sdk\3.0.100\

主机(用于支持):版本:3.0.0 提交:7d57652f33

安装的 .NET Core SDK:2.2.401 [C:\Program Files\dotnet\sdk] 3.0.100 [C:\Program Files\dotnet\sdk]

.NET Core 运行时安装:Microsoft.AspNetCore.All 2.2.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.2.6 [C:\Program Files\dotnet\shared\ Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] Microsoft.NETCore.App 2.2.6 [C:\Program Files\dotnet\shared\ Microsoft.NETCore.App] Microsoft.NETCore.App 3.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.0 [C:\Program Files\dotnet\shared\ Microsoft.WindowsDesktop.App]

要安装其他 .NET Core 运行时或 SDK:https :
//aka.ms/dotnet-download

Ton*_*Ngo 11

对于 v2.2

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseMvc();
    }
Run Code Online (Sandbox Code Playgroud)

而对于 v3

public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
Run Code Online (Sandbox Code Playgroud)

还要确保您的 csproj 是目标 .net core 3.0

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)