从 ASP.NET Core 2.2 升级到 3.0

Posted

技术标签:

【中文标题】从 ASP.NET Core 2.2 升级到 3.0【英文标题】:Upgrading from ASP.NET Core 2.2 to 3.0 【发布时间】:2020-01-29 12:31:49 【问题描述】:

我有一个具有以下csproj 配置的 ASP.NET Core 项目:

<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

我想将项目升级到&lt;TargetFramework&gt;netcoreapp3.0&lt;/TargetFramework&gt;。但是,这样做后,我收到以下警告:

C:\Program Files\dotnet\sdk\3.0.100\Sdks\Microsoft.NET.Sdk\targets\ Microsoft.NET.Sdk.DefaultItems.targets(149,5):警告 NETSDK1080:对 Microsoft 的 PackageReference。面向 .NET Core 3.0 或更高版本时,不需要 AspNetCore.App。如果使用 Microsoft.NET.Sdk.Web,则会自动引用共享框架。否则,应将 PackageReference 替换为 FrameworkReference。

解决这个问题的具体方法是什么?我试图删除对Microsoft.AspNetCore.App 的引用,但这不起作用。该代码未引用共享框架。

另外,“否则,应该将 PackageReference 替换为 FrameworkReference”是什么意思?

【问题讨论】:

迁移说明可在 ASP.NET Core 文档站点获得:Migrate from ASP.NET Core 2.2 to 3.0。他们解释说根本不需要这个包引用,使用“Microsoft.NET.Sdk.Web”SDK 的包会自动添加它。以Razor为目标的项目需要将其添加为FrameworkReference 【参考方案1】:

使用以下为我修复它更新项目文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <UserSecretsId>My-secret</UserSecretsId>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="3.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="3.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0" />
  </ItemGroup>

</Project>

Reference

【讨论】:

【参考方案2】:

如果您正在构建一个 Web 项目,请确保您的项目文件的第一行是:

<Project Sdk="Microsoft.NET.Sdk.Web">

在这种情况下,它会自动包含在框架中:Microsoft.AspNetCore.App。您不必再次包含它。

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio#framework-reference

如果您正在构建剃刀库而不是 Web 项目,请确保项目文件的第一行是:

<Project Sdk="Microsoft.NET.Sdk.Razor">

在这种情况下,您的库可能依赖于 ASP.NET Core 中的某个类。你必须添加这个:

  <ItemGroup>
     <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

别忘了补充:

    <AddRazorSupportForMvc>true</AddRazorSupportForMvc>

&lt;PropertyGroup&gt;

如果您不构建 Razor 库或 Web 项目,通常不需要Microsoft.AspNetCore.App。如果您确实可以确定自己在做什么并且确实需要它,请考虑添加:

  <ItemGroup>
     <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

【讨论】:

我的既不是 web 也不是 Razor 项目……它是一个普通的类库。所以,最后一个建议奏效了。谢谢! 我只是右键单击 Dependencies > Packages 下的 Microsoft.AspNetCore.App 包并选择了删除

以上是关于从 ASP.NET Core 2.2 升级到 3.0的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败

从 ASP.NET Core 3.1 升级到 ASP.NET 5.0 后,User.Claims 为空

从 2.2 迁移到 3.1 的 ASP.Net Core 解决方案在发布时不会运行

从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

Linq 查询在 ASP.NET-Core 3.0 及更高版本中对数字等字符串进行排序

ASP.NET Core 2.2 MVC MapRoute 项目到 ASP.NET 3.0 端点 MapAreaControllerRoute “找不到此本地主机页面”