【问题标题】:Downgrade .Net Core project from 3.1 to 2.2 - The type or namespace name 'IWebHostEnvironment' could not be found将 .Net Core 项目从 3.1 降级到 2.2 - 找不到类型或命名空间名称“IWebHostEnvironment”
【发布时间】:2020-02-09 04:28:25
【问题描述】:

我不得不降级使用以下方法搭建的 .Net Core 3.1 项目:

dotnet new angular -o my-new-app

现在应该适用于 .Net Core 2.2、Angular v8。

我现在得到:

错误 CS0246:类型或命名空间名称“IWebHostEnvironment”可能 找不到(您是否缺少 using 指令或程序集 参考?)

这就上线了:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

Visual Studio 2019 中的自动建议修复选项没有帮助,因为它们都是“生成接口”,与潜在的丢失包无关。

我在这个类上的 using 声明如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.AngularCli;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;`

这些都是有效的(未标记的)引用。

还有许多其他错误。我在这里错过了什么?

编辑

我走这条路的唯一原因是我无法使用 .Net Core 3.1 部署到 Azure,即使我的应用服务设置为使用该版本 (LTS)。

当前的 .NET SDK 不支持面向 .NET Core 3.1。任何一个 以 .NET Core 2.2 或更低版本为目标,或使用 .NET SDK 的版本 支持 .NET Core 3.1。

这是 Azure 服务器上 CI 进程的错误。我看到的唯一信息是微软还没有为 .Net Core 3.1 Azure CI 做好充分准备,但我觉得这有点难以置信。为简单起见,我只想降级到 2.2,我知道它可以很好地与 Azure 配合使用,并且可以满足我的项目需求。

我删除了 Azure 上的应用服务并将其重新创建为 Windows 下托管的 .Net Core 2.2 应用服务。我遇到的这些其他问题是在我自己的机器上尝试降级到 2.2。

编辑 2

这是我当前的依赖项,所有依赖项都显示为 2.2,包括 SDK。

【问题讨论】:

  • IWebHostEnvironment 仅在 .NET Core 3.0 和 3.1 中可用。您将无法在 2.2 中按原样使用代码。根据migration docs,它看起来像是IHostingEnvironment 的替代品
  • @Herohtar 我想做的是在一个新项目下重新搭建它,看看它是如何搭建出Startup.cs的,但是如果我运行dotnet new angular -o my-new-app,它仍然会把它搭建成3.1 .Net Core 应用程序。除非我必须下载项目模板,否则我似乎不知道如何将其强制为 2.2 脚手架。
  • 可能建议查看一个针对从 2.2 升级到 3 的用户的文档 - 微软清理了命名空间中的许多歧义,但基本上只保留了功能。升级比降级更有可能,因此您可能会找到更多与解释升级更改相关的资源并能够以降级方式应用它们
  • 我不太明白你评论的最后一句话。错误消息由编译代码的设备发出。该设备缺少相关的 sdk。当您将 Azure 应用服务连接到存储库时,Azure 机器将下载该存储库并对其进行编译,然后将其上线。 Azure 目前无法编译 3.1。我认为即使 Azure 机器上有一个合适的 sdk,它也不会使用它,但我必须检查我们对构建脚本所做的工作以确保
  • 这里有一些可能有用的资源 - 一个是显示哪些区域具有哪些 SDK 和运行时的地图:aspnetcoreon.azurewebsites.net/#.NET%20Core%20SDK,另一个是关于推出 3.1 时遇到的问题的讨论:github.com/Azure/app-service-announcements-discussions/issues/…

标签: c# asp.net-core .net-core asp.net-core-mvc asp.net-core-2.2


【解决方案1】:

您可以在 .net core 2 中使用 IHostingEnvironment 代替。 当然你必须确保你已经安装了.net core 2.2。 sdk。

【讨论】:

  • 这并不能解决问题,当我更改它时,我得到“CS0104 'IHostingEnvironment' is a ambiguous reference between 'Microsoft.AspNetCore.Hosting.IHostingEnvironment' and 'Microsoft.Extensions.Hosting.IHostingEnvironment' ”。这是因为某种不应该再带进来的包裹吗?
  • IHostingEnvironment 在 .net core 2.2 中具有命名空间 Microsoft.Extensions.Hosting 但在 .net core 3 及更高版本中此命名空间已更改为 Microsoft.AspNetCore.Hosting。您需要在使用部分删除此名称空间以消除歧义
【解决方案2】:

我能够通过安装以下项目模板来解决这个问题:

https://marketplace.visualstudio.com/items?itemName=BernardoLloret-Fuentes.aspnetcore22withangular7

这使我可以从头开始创建一个新项目,我可以从中复制 Startup.csProgram.cs 文件,以及复制已安装的 NuGet 包。

这解决了将项目从 Core 3.1 切换到 Core 2.2 所导致的所有错误。

由于使用了一些 3.1 功能(例如 Range),还涉及其他代码更改,但我将这些更改支持为 2.2 兼容的代码更改,并且一切都恢复正常了。

如果其他人正在尝试这样做,这里是您需要将其从 3.1 移至 2.2 的 NuGet 包:

【讨论】:

  • 值得注意的是,2.2 已经结束。长期支持的是 2.1。遵循这些步骤的用户应该期望在 Azure 整理后很快升级到 3.1 LTS 之类的东西
  • @CaiusJard 明白了,但我需要的只是一些可行的东西,2.2 适用于我的 Angular 8 应用程序。不需要 3.1,直到微软自己弄清楚为什么没有通过 GitHub 为 CI 安装正确的 SDK,然后我需要完成工作。
  • 我收到的反馈是 Azure 出于安全考虑推迟部署 3.1,但我自己没有检查过这个的真实性
  • 请注意,他们不希望您在 Microsoft.AspNetCore.App 上指定版本,Azure 会在构建时警告您。编辑项目文件以删除该程序集上的 version="" 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
相关资源
最近更新 更多