为什么.Net Core 2.1.1通用主机需要庞大的Microsoft.AspNetCore.App元软件包才能正常工作?

时间:2018-07-27 08:23:09

标签: asp.net-core .net-core asp.net-core-2.1

我正在尝试使用新的generic host创建一个.Net Core 2.1.1控制台应用程序。

这是一个非常简单的程序,只是一个.net core 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();
        }
    }
}

我发现我可以只安装软件包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>

此软件包将安装许多其他软件包:

  • 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被通用主机生成器淘汰之前,这只是一个临时问题吗?

1 个答案:

答案 0 :(得分:6)

  
      
  1. 为什么必须添加Microsoft.AspNetCore.App,并且可以避免这种情况吗?
  2.   

不只是方便和易于上手。您甚至不必费心,发布/构建应用程序时,未引用的程序包将被删除。另请参见this answer

  

为什么必须添加Microsoft.AspNetCore.App,并且可以通过某种方式避免它?   在WebHostBuilder被通用主机生成器淘汰之前,这只是暂时的问题吗?

不是。 Microsoft.Extensions.Configuration.FileConfigurationExtensionsMicrosoft.Extensions.Configuration.FileExtensions/软件包的一部分,您没有引用它,因此会出现错误