为什么.Net Core 2.1.1 Generic Host需要巨大的Microsoft.AspNetCore.App元数据包才能工作?

Sti*_*son 1 .net-core asp.net-core asp.net-core-2.1

我正在尝试使用新的通用主机创建.Net Core 2.1.1控制台应用程序.

这是一个非常简单的程序,只是一个.net核心2.1控制台应用程序,如下所示:

using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;

namespace ConsoleApp1 {
    internal class Program {
        private async Task Main(string[] args)
        {
            await new HostBuilder()
                .ConfigureAppConfiguration(x => x.SetBasePath("."))
                .RunConsoleAsync();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是安装巨大的包Microsoft.AspNetCore.App元数据包,我想我可以只安装包Microsoft.Extensions.Hosting v. 2.1.1,所以我.csproj变成:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <LangVersion>latest</LangVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.1" />
  </ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

该软件包安装了许​​多其他软件包:

  • Microsoft.Extensions.Configuration(2.1.1)
  • Microsoft.Extensions.DependencyInjection(2.1.1)
  • Microsoft.Extensions.FileProviders.Physical(2.1.1)
  • Microsoft.Extensions.Hosting.Abstractions(2.1.1)
  • Microsoft.Extensions.Logging(2.1.1)

当我这样做时,我遇到麻烦,因为扩展方法IConfigurationBulider.SetBasePath(实现Microsoft.Extensions.Configuration.FileConfigurationExtensions)无法通过编译器/构建过程解析/找到.

我已经尝试完全限定扩展方法,但就好像项目中没有引用包中的相关程序集.

解决方案是添加巨大的Microsoft.AspNetCore.App元数据包然后它可以工作.但是当我的应用程序与AspNet Core无关时,我发现我需要添加一个AspNetCore包,这一点很奇怪.

  1. 为什么有必要添加Microsoft.AspNetCore.App并且可以以某种方式避免它?
  2. 在WebHostBuilder逐步淘汰以支持通用主机构建器之前,它只是一个临时问题吗?

Tse*_*eng 6

  1. 为什么有必要添加Microsoft.AspNetCore.App并且可以以某种方式避免它?

它不是,只是方便,易于开始使用教程.您甚至不必打扰,在您发布/构建应用程序时,无论如何都会剥离未引用的包.另见这个答案.

为什么有必要添加Microsoft.AspNetCore.App并且可以以某种方式避免它?在WebHostBuilder逐步淘汰以支持通用主机构建器之前,它只是一个临时问题吗?

不是.Microsoft.Extensions.Configuration.FileConfigurationExtensionsMicrosoft.Extensions.Configuration.FileExtensions / package的一部分,您没有参考,因此您得到的错误