类库(标准 2.1 或核心 3.1):找不到命名空间名称“IWebHostEnvironment”

Nak*_*der 4 .net-standard .net-standard-2.1 .net-core-3.1

  1. 新建项目,类库(.NET 标准)
  2. 在项目上,属性,从 2.0 更改为 2.1
  3. 修改后的 Class1 :
public class Class1
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这固定(正确?) IApplicationBuilder 红色波浪线:
  2. 但是,库项目无法编译:“错误 CS0246 找不到类型或命名空间名称‘IWebHostEnvironment’……”

请为这两个接口添加什么引用?或者你应该只在网站项目中使用这些接口?

.NET Core 3.1 类库的结果也相同。视觉工作室 16.4.4

非常感谢任何帮助。

Tho*_*s N 5

您可能需要遵循本指南(用于将 2.2 迁移到 3.0)

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

这解释了发生了什么 https://github.com/dotnet/AspNetCore/issues/7749

更新:

净标准

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

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
<!-- Should work with either if you have sdks installed and do restore -->
<!--<TargetFramework>netstandard2.1</TargetFramework>-->
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />    
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.1" />
  </ItemGroup>

</Project>

Run Code Online (Sandbox Code Playgroud)

带类文件

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;

namespace ClassLibrary2
{
    public class Class1
    {
        public void Configure(IApplicationBuilder app, IHostEnvironment env)
        {

        }
    }
}

Run Code Online (Sandbox Code Playgroud)

网络核心 3.1

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
</Project>

Run Code Online (Sandbox Code Playgroud)

带类文件

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;

namespace ClassLibrary3
{
    public class Class1
    {
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {

        }
    }
}

Run Code Online (Sandbox Code Playgroud)

  • 阅读您的第一个链接,解释说这是相反的情况:IHostingEnvironment 正在被 IWebHostEnvironment 替换。您可以通过添加两个新的 ASP.NET Core 项目来确认这一点:2.2 Startup.cs 包含:Configure(IApplicationBuilder app, IHostingEnvironment env); 而 3.1 项目包含:Configure(IApplicationBuilder app, IWebHostEnvironment env) (2认同)

Nak*_*der 5

这似乎适用于 .NET Core 3.1 类库项目文件,但不适用于 .NET Standard 2.1 项目文件:

我将以下内容添加到项目文件中:

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

现在构建成功了:

public class Class1
{
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

.NET Standard 2.1 类库项目是否有办法支持新的 IWebHostEnvironment ?