Program.cs:
using MyService;
IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService(options => {
options.ServiceName = "MyService";
})
.ConfigureServices((hostContext, services) => {
services.AddHostedService();
})
.Build();
await host.RunAsync();
MyWorker.cs:
namespace MyService;
public class MyWorker : BackgroundService
{
private readonly ILogger _logger;
public MagSageWorker(ILogger logger)
{
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
if (_logger.IsEnabled(LogLevel.Information))
{
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
}
await Task.Delay(1000, stoppingToken);
}
}
}
Каждый раз получаю это исключение:
Приложение: MyService.exe
Версия CoreCLR: 8.0.724.31311
Версия .NET: 8.0.7
Описание: Процесс был завершен из-за необработанного исключения.
Информация об исключении: System.IO.FileNotFoundException: не удалось загрузить файл или сборку «System.Diagnostics.EventLog, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51». Указанное описание недоступно.
Имя файла: 'System.Diagnostics.EventLog, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'
at Microsoft.Extensions.Logging.EventLog.EventLogLogger..ctor(имя строки, настройки EventLogSettings, IExternalScopeProvider externalScopeProvider)
в Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider.CreateLogger(имя строки)
в Microsoft.Extensions .Logging.LoggerInformation..ctor(поставщик ILoggerProvider, категория String)
в Microsoft.Extensions.Logging.LoggerFactory.CreateLoggers(имя категории String)
в Microsoft.Extensions.Logging.LoggerFactory.CreateLogger(имя категории String)
в Microsoft.Extensions.Logging.Logger1..ctor(ILoggerFactory factory) at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span1 copyOfArgs, BindingFlags ignoreAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags ignoreAttr, Binderbinder, параметры Object[], CultureInfo Culture)
at System.Reflection.RuntimeConstructorInfo .Invoke(BindingFlags ignoreAttr, связыватель Binder, параметры Object[], культура CultureInfo)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite конструкторCallSite, контекст RuntimeResolverContext)
в Microsoft.Extensions.DependencyInjection .ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, аргумент TArgument)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite конструкторCallSite, контекст RuntimeResolverContext)
в Microsoft.Extensions.DependencyInjection.ServiceLookup. CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, аргумент TArgument)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, область ServiceProviderEngineScope)
в Microsoft.Extensions.DependencyInjection.ServiceProvider. CreateServiceAccessor(ServiceIdentifier serviceIdentifier)
в System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)
в Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope)
в Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(поставщик IServiceProvider, тип serviceType)
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](поставщик IServiceProvider)
в Microsoft.Extensions.Hosting.HostBuilder .c__DisplayClass35_0.b__2(IServiceProvider _)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite FactoryCallSite, RuntimeResolverContext context)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, аргумент TArgument)
в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, область ServiceProviderEngineScope)
в Microsoft.Extensions.DependencyInjection.ServiceProvider. CreateServiceAccessor(ServiceIdentifier serviceIdentifier)
в System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory)
в Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(ServiceIdentifier serviceIdentifier, ServiceProviderEngineScope serviceProviderEngineScope)
в Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(поставщик IServiceProvider, тип serviceType)
в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](поставщик IServiceProvider)
в Microsoft.Extensions.Hosting.HostBuilder .ResolveHost(IServiceProvider serviceProvider, DiagnosticListener DiagnosticListener)
в Microsoft.Extensions.Hosting.HostBuilder.Build()
в Program.$(String[] args) в C:\Users\MyUsername\source\repos \MySolution\MyService\Program.cs:строка 4
at Program.(String[] args)
Я попробовал несколько решений, найденных в Интернете. , но абсолютно никакой разницы:
- Обновление всех зависимостей
- Добавление System.Diagnostics.EventLog вручную в проект
- Размещение System.Diagnostics.EventLog.dll в двоичной папке
- Принудительное использование System.Diagnostics.EventLog версия в файле .csproj
- и т. д.
Спасибо.
Изменить 1: >
MyService.csproj:
net8.0-windows
enable
enable
dotnet-MyService-guid-removed
Подробнее здесь: https://stackoverflow.com/questions/787 ... starting-t