我正在尝试使用新的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>
此软件包将安装许多其他软件包:
这样做时,由于扩展方法IConfigurationBulider.SetBasePath
(在Microsoft.Extensions.Configuration.FileConfigurationExtensions
中实现)而引起麻烦,编译器/构建过程无法解析/找到扩展方法。
我已经尝试完全限定扩展方法,但是好像项目中没有引用软件包中的相关程序集。
解决方案是添加巨大的Microsoft.AspNetCore.App元软件包,然后它可以工作。但是,当我的应用程序与AspNet Core无关时,我需要添加AspNetCore程序包,这使我感到奇怪。
答案 0 :(得分:6)
- 为什么必须添加Microsoft.AspNetCore.App,并且可以避免这种情况吗?
不只是方便和易于上手。您甚至不必费心,发布/构建应用程序时,未引用的程序包将被删除。另请参见this answer。
为什么必须添加Microsoft.AspNetCore.App,并且可以通过某种方式避免它? 在WebHostBuilder被通用主机生成器淘汰之前,这只是暂时的问题吗?
不是。 Microsoft.Extensions.Configuration.FileConfigurationExtensions
是Microsoft.Extensions.Configuration.FileExtensions/软件包的一部分,您没有引用它,因此会出现错误