ca9*_*3d9 24 .net c# .net-core
以下代码得到了错误.为.Net Core 2.0控制台应用程序设置日志记录和配置管理的正确方法是什么?
错误CS1061'LoggerFactory'不包含'AddConsole'的定义,并且没有可以找到接受类型'LoggerFactory'的第一个参数的扩展方法'AddConsole'(您是否缺少using指令或程序集引用?)
错误CS1503参数2:无法从"Microsoft.Extensions.Configuration.IConfigurationSection"转换为"System.Action"
class Program
{
static void Main(string[] args)
{
var services = new ServiceCollection();
ConfigureServices(services);
var serviceProvider = services.BuildServiceProvider();
var app = serviceProvider.GetService<Application>();
Task.Run(() => app.Run()).Wait();
}
private static void ConfigureServices(IServiceCollection services)
{
ILoggerFactory loggerFactory = new LoggerFactory()
.AddConsole() // Error!
.AddDebug();
services.AddSingleton(loggerFactory); // Add first my already configured instance
services.AddLogging(); // Allow ILogger<T>
IConfigurationRoot configuration = GetConfiguration();
services.AddSingleton<IConfigurationRoot>(configuration);
// Support typed Options
services.AddOptions();
services.Configure<MyOptions>(configuration.GetSection("MyOptions")); // Error!
services.AddTransient<Application>();
}
private static IConfigurationRoot GetConfiguration()
{
return new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddXmlFile("App.config", optional: true).Build();
}
public class MyOptions
{
public string Name { get; set; }
}
public class Application
{
ILogger _logger;
MyOptions _settings;
public Application(ILogger<Application> logger, IOptions<MyOptions> settings)
{
_logger = logger;
_settings = settings.Value;
}
public async Task Run()
{
try
{
_logger.LogInformation($"This is a console application for {_settings.Name}");
}
catch (Exception ex)
{
_logger.LogError(ex.ToString());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Kir*_*kin 23
它看起来你可能会遗漏几个依赖项:
Microsoft.Extensions.Logging.Console,它提供了AddConsole扩展方法.Microsoft.Extensions.Options.ConfigurationExtensions,它提供了Configure<T>您似乎缺少的扩展方法.在.NET核心可执行文件配置服务方面,安德鲁锁具有后对.NET核心的第一个版本的话题.其中一些可能已经过时了.NET Core 2最近的到来,但值得一读.
Mar*_*rco 17
在Kirk Larkins的基础上回答(确保你有nuget软件包安装),你可以简化日志记录配置并通过传入一个Microsoft.Extensions.Options.ConfigurationExtensions来跳过loggerFactory的声明Microsoft.Extensions.Logging.Console:
public static IServiceProvider ConfigureServices(IServiceCollection serviceCollection)
{
//ILoggerFactory loggerFactory = new LoggerFactory()
// .AddConsole()
// .AddDebug();
serviceCollection
.AddLogging(opt =>
{
opt.AddConsole();
opt.AddDebug();
})
.AddTransient<IFooService, FooService>();
/*... rest of config */
var serviceProvider = serviceCollection.BuildServiceProvider();
return serviceProvider;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18272 次 |
| 最近记录: |