【发布时间】: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 包。
- 为什么需要添加 Microsoft.AspNetCore.App 并且可以通过某种方式避免?
- 在 WebHostBuilder 被淘汰以支持通用主机构建器之前,这只是一个临时问题吗?
【问题讨论】:
-
它没有。它不直接或间接地存在于依赖项中。我在控制台应用程序中打包和 Json 配置没有任何问题。即使在完整框架项目中。
Microsoft.AspNetCore.App未添加
标签: asp.net-core .net-core asp.net-core-2.1