如何导入 Microsoft.AspNetCore.Hosting.IWebHostEnvironment?

ca9*_*3d9 7 c# asp.net-core

我的项目中的以下代码出现以下错误。

public static IServiceCollection AddInfrastructure(this IServiceCollection services, 
  IConfiguration configuration, 
  Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment) // Error
{
    //    .....
    return services;
}
Run Code Online (Sandbox Code Playgroud)

错误 CS0234 命名空间“Microsoft.AspNetCore.Hosting”中不存在类型或命名空间名称“IWebHostEnvironment”(您是否缺少程序集引用?)

我已经导入了 nuget 包。

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

小智 7

如果要Microsoft.AspNetCore.Hosting.IWebHostEnvironment在 Web 项目以外的单独库项目中使用,则必须Microsoft.AspNetCore.App通过编辑项目文件将包引用显式添加到库项目中。

在 Dotnet 5.0 中,我们也必须遵循相同的方法。

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

 <PropertyGroup>
  <OutputType>Library</OutputType>
  <TargetFramework>net5.0</TargetFramework>
 </PropertyGroup>

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

 <ItemGroup>...</ItemGroup>

</Project>
Run Code Online (Sandbox Code Playgroud)


Cod*_*ife 5

我正好遇到了您的问题,并且知道如何解决它:)

将此添加到您的 *.csproj 文件中:

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

所以IWebHostEnvironment在NuGet包Microsoft.AspNetCore.App。

我真的不知道为什么即使它在那个命名空间IWebHostEnvironment中也不附带包Microsoft.AspNetCore.Hosting。这真的很混乱。也许这将在未来清理......

更新

上述解决方案适用于 Windows,但我现在尝试使用 Visual Studio for Mac 在 macOS 上运行该项目,但它无法构建。对此的解决方案如@mindplay.dk 的注释中所述,将项目类型更改<Project Sdk="Microsoft.NET.Sdk.Web">为 *.csproj 文件的第一行。(即使这对我的 ClassLibrary 项目没有任何意义)

重现步骤:只需尝试将 IWebHostEnvironment 放在单独的类库项目中,您就会遇到所有这些问题......

  • 将其添加为包引用给了我一个警告(在 VS 2019 中),说你不应该这样做。这个答案给了我线索,但最终我的解决方案是将 .csproj 文件中项目根节点的 SDK 属性更改为: `&lt;Project Sdk="Microsoft.NET.Sdk.Web"&gt;` - I [此处](https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-use-project-sdk?view=vs-2019)了解其工作原理和原理。(我仍然很困惑为什么如此重要的东西似乎没有出现在 VS 2019 中的任何地方。它显示了*已解决的*框架的列表,但 SDK 设置本身却找不到) (3认同)