如何将.NET Core 2.2 Web API迁移到.NET Core 3.0? [英] How do I migrate .NET Core 2.2 Web API to .NET Core 3.0?
问题描述
我正在关注 Microsoft的迁移指南,但失败了。因此,我改为使用.NET 2.2创建了一个新项目以建立干净的模板,然后尝试迁移到.NET Core 3.0。但是它再次失败了。在 Startup.cs
中,依赖项注入找不到方法 services.AddMvc()
。
I was following Microsoft's migration guide, but failed. So, instead, I created a new project with .NET 2.2 to establish a clean template, and then tried migrating to .NET Core 3.0. But it once again failed. In the Startup.cs
, the dependency injection cannot find the method services.AddMvc()
.
似乎我的代码仍然引用.NET 2.2而不是.NET 3.0。
It seems my code still refers to .NET 2.2 instead of .NET 3.0.
如果我运行运行dotnet watch
,出现以下错误:
If I run dotnet watch run
, I get the following error:
应用程序启动异常System.InvalidOperationException:
端点路由不支持 IApplicationBuilder.UseMvc(...)。
要使用 IApplicationBuilder.UseMvc,请在
的ConfigureServices(...)中设置
的 MvcOptions.EnableEndpointRouting = false。
处Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder
应用程序,操作'1 configureRoutes)在
处Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder
应用程序) netmig.Startup.Configure(IApplicationBuilder应用,
IHostingEnvironment env)在E:\testapp\netmig\Startup.cs:line 46 at
System.RuntimeMethodHandle.InvokeMethod(Object target,Object []
参数,签名sig,布尔值构造函数,布尔值wrapExceptions)
在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags
invokeAttr,Binder活页夹,Object []参数,CultureInfo文化) br> Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(对象
实例,IApplicationBuilder构建器)中的
Microsoft.AspNetCore.Hosting.ConfigureBuilder。<> c__DisplayClass4_0.b__0(IApplicationBuilder
$ b的$ b builder)Microsoft.AspNetCore.Hosting.GenericWebHostBuild er。<> c__DisplayClass13_0.b__2(IApplicationBuilder
应用),价格为
Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter。<> c__DisplayClass0_0.g__MiddlewareFilterBuilder | 0(IApplicationBuilder
生成器),价格为
Microsoft.AspNetCore.HostFilteringStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder
应用)at
Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken
cancelleToken)未处理的异常。
System.InvalidOperationException:端点路由不支持
IApplicationBuilder.UseMvc(...)。要在
ConfigureServices(...)中使用 IApplicationBuilder.UseMvc
设置 MvcOptions.EnableEndpointRouting = false。
处Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder
应用程序,操作'1 configureRoutes)在
处Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder
应用程序) netmig.Startup.Configure(IApplicationBuilder应用,
IHostingEnvironment env)在E:\testapp\netmig\Startup.cs:line 46 at
System.RuntimeMethodHandle.InvokeMethod(Object target,Object []
参数,签名sig,布尔值构造函数,布尔值wrapExceptions)
在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags
invokeAttr,Binder活页夹,Object []参数,CultureInfo文化) br> Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(对象
实例,IApplicationBuilder构建器)中的
Microsoft.AspNetCore.Hosting.ConfigureBuilder。<> c__DisplayClass4_0.b__0(IApplicationBuilder
$ b的$ b builder)Microsoft.AspNetCore.Hosting.GenericWebHostBuild er。<> c__DisplayClass13_0.b__2(IApplicationBuilder
应用),价格为
Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter。<> c__DisplayClass0_0.g__MiddlewareFilterBuilder | 0(IApplicationBuilder
生成器),价格为
Microsoft.AspNetCore.HostFilteringStartupFilter。<> c__DisplayClass0_0.b__0(IApplicationBuilder
应用)在
Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken
cancelleToken)在
Microsoft Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost
主机,CancellationToken令牌)在
处的.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken
cancelleToken)在Microsoft。在
处的Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost
主机,CancellationToken令牌)在netmig.Program.Main(String []上的Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost
主机) args)
E:\ \testapp\netmig\Program.cs:line 18监视:退出,错误代码
-532462766
Application startup exception System.InvalidOperationException: Endpoint Routing does not support 'IApplicationBuilder.UseMvc(...)'. To use 'IApplicationBuilder.UseMvc' set 'MvcOptions.EnableEndpointRouting = false' inside 'ConfigureServices(...). at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) at netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in E:\testapp\netmig\Startup.cs:line 46 at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2(IApplicationBuilder app) at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) Unhandled exception. System.InvalidOperationException: Endpoint Routing does not support 'IApplicationBuilder.UseMvc(...)'. To use 'IApplicationBuilder.UseMvc' set 'MvcOptions.EnableEndpointRouting = false' inside 'ConfigureServices(...). at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app, Action'1 configureRoutes) at Microsoft.AspNetCore.Builder.MvcApplicationBuilderExtensions.UseMvc(IApplicationBuilder app) at netmig.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env) in E:\testapp\netmig\Startup.cs:line 46 at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.ConfigureBuilder.Invoke(Object instance, IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.ConfigureBuilder.<>c__DisplayClass4_0.b__0(IApplicationBuilder builder) at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.b__2(IApplicationBuilder app) at Microsoft.AspNetCore.Mvc.Filters.MiddlewareFilterBuilderStartupFilter.<>c__DisplayClass0_0.g__MiddlewareFilterBuilder|0(IApplicationBuilder builder) at Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder app) at Microsoft.AspNetCore.Hosting.GenericWebHostService.StartAsync(CancellationToken cancellationToken) at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken) at Microsoft.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 host) at netmig.Program.Main(String[] args) in E:\testapp\netmig\Program.cs:line 18 watch : Exited with error code -532462766
我正在运行的完整代码可以在GitHub上找到。我的.NET信息:
The full code I am running can be found on GitHub. My .NET info:
dotnet --info .NET Core SDK(反映任何global.json):版本:
3.0.100提交:04339c3a26
dotnet --info .NET Core SDK (reflecting any global.json): Version:
3.0.100 Commit: 04339c3a26
运行时环境:操作系统名称:Windows操作系统版本:
10.0.18362操作系统平台:Windows RID:win10-x64 Base路径:C:\Program Files\dotnet\sdk\3.0.100\
Runtime Environment: OS Name: Windows OS Version: 10.0.18362 OS Platform: Windows RID: win10-x64 Base Path: C:\Program Files\dotnet\sdk\3.0.100\
主机(用于支持):版本:3.0.0提交: 7d57652f33
Host (useful for support): Version: 3.0.0 Commit: 7d57652f33
已安装.NET Core SDK:
2.2.401 [C:\Program Files\dotnet\sdk]
3.0.100 [C:\Program Files\dotnet\sdk]
.NET Core SDKs installed: 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: \程序文件\dotnet\共享\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.2.6 [C:\程序
文件\dotnetb共享\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0 [C:\Program
文件\dotnet\共享\Microsoft.AspNetCore.App] Microsoft。 ñ ETCore.App
2.2.6 [C:\Program Files\dotnet\SharedMicrosoft.NETCore.App] Microsoft.NETCore.App 3.0.0 [C:\Program
文件共享网络Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.0 [C:共享程序
文件共享Microsoft。 WindowsDesktop.App]
.NET Core runtimes installed: 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-下载
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
推荐答案
对于v2.2
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc();
}
对于v3
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
还要确保您的csproj是目标.net core 3.0
Also make sure your csproj is target .net core 3.0
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
这篇关于如何将.NET Core 2.2 Web API迁移到.NET Core 3.0?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!