【问题标题】:Why does .Net Core 2.1.1 Generic Host require the huge Microsoft.AspNetCore.App metapackage to work?为什么 .Net Core 2.1.1 通用主机需要庞大的 Microsoft.AspNetCore.App 元包才能工作?
【发布时间】:2018-07-27 08:23:08
【问题描述】:

我正在尝试使用新的 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.Extensions.Hosting v. 2.1.1,而不是安装巨大的包Microsoft.AspNetCore.App元包,所以我的.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 被淘汰以支持通用主机构建器之前,这只是一个临时问题吗?

【问题讨论】:

  • 它没有。它不直接或间接地存在于依赖项中。我在控制台应用程序中打包 Json 配置没有任何问题。即使在完整框架项目中。 Microsoft.AspNetCore.App 未添加

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


【解决方案1】:
  1. 为什么需要添加 Microsoft.AspNetCore.App 并且可以通过某种方式避免?

这不是,只是方便且易于开始使用教程。您甚至不必费心,当您发布/构建应用程序时,非引用的包无论如何都会被删除。另见this answer

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

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

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2012-07-13
    • 2017-08-14
    相关资源
    最近更新 更多