ServiceProvider.GetService <Type>выдает исключение для каждого использования - PullRequest
0 голосов
/ 29 октября 2019

Я новичок во всей среде C # .Net и пытаюсь развернуть простое консольное приложение .NetCore 3 на Windows Server 2012 R2 из MacOS 10.14. Проблема в том, что приложение работает на macOS, но после развертывания на Windowsэто не работает на сервере вот код

IServiceCollection services = new ServiceCollection();
services.AddLogging();
var serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
Console.ReadKey();

Я отлаживал код несколько раз, и исключение выдается только при использовании метода GetService, как здесь

var loggerFactory = serviceProvider.GetService<ILoggerFactory>();

сообщение об исключении:

Инициализатор типа для Microsoft.Extentions.DependecnyInjection.DependencyInjectionEventSource вызвал исключение

Я искал решения, но не нашел ни одного, даже незакройте один.

edit 1:

подробнее об ошибке, надеюсь, она поможет

  1. Сообщение об исключении:

    Инициализатор типа для «Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource» вызвал исключение.

  2. StackTrace:

в Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.CreateServiceAccessor (тип serviceTyp e) в System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 233 * 233 * 233 *.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine. ) в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService [T] (поставщик IServiceProvider)

в Inj.Program.Main (аргументы String []) в / Users / programmer / VSProjects / Inj / Inj / Program. cs: строка 19

InnerException:

System.ArgumentException: внешний компонент выдал исключение. в System.Globalization.CompareInfo.CompareString (ReadOnlySpan 1 string1, ReadOnlySpan 1 строка2, CompareOptions Opti дополнения) в System.Globalization.CompareInfo.Compare (String string1, Струнный строке2, опции CompareOptions) в System.Globalization.TextInfo.PopulateIsAsciiCasingSameAsInvariant ()
в System.Globalization.TextInfo.ChangeCaseCommon [TConversion] (строковый источник) в System.Globalization.TextInfo.ToUpper (String str) в System.String.ToUpperInvariant () в System.Diagnostics.Tracing.EventSource.GetGateTy (Type)
в System.Diagnostics.Tracing.EventSource..ctor (параметры EventSourceSettings, черты String []) в System.Diagnostics.Tracing.EventSource..ctor (параметры EventSourceSettings) в Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource..ctor () в Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource..cctor ()

1 Ответ

0 голосов
/ 01 ноября 2019

Кажется, проблема связана с запуском приложения, поскольку dll нужно опубликовать приложение как автономный исполняемый файл для целевой платформы, поэтому в моем случае я только что опубликовал на Windows Server 2012 R2 из MacOs 10.14, используяследующие команды (эти команды не будут публиковать на сервере напрямую, вам нужно переместить получившуюся папку в общую папку на вашем сервере)

dotnet publish -c release -r win10-x64

еще лучше

dotnet publish -r win-x64 -c Release / p: PublishSingleFile = true

после перемещения запущенных папокисполняемый файл Windows .exe и теперь он работает как шарм

...