ServiceProvider.GetService<Type> 每次使用都会抛出异常
Posted
技术标签:
【中文标题】ServiceProvider.GetService<Type> 每次使用都会抛出异常【英文标题】:ServiceProvider.GetService<Type> throw exception for every usage 【发布时间】:2020-02-25 00:54:09 【问题描述】:我是整个 C# .Net 环境的新手,我正在尝试将一个简单的 Console .NetCore 3 应用程序从 MacOS 10.14 部署到 windows server 2012 R2 问题是该应用程序确实可以在 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 的类型初始化程序引发异常
我已经搜索了解决方案,但没有找到任何解决方案,甚至没有一个接近的解决方案。
编辑 1:
这里有更多关于错误的细节,希望它可以帮助
异常消息:
类型初始化器 'Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource' 抛出异常。
-
堆栈跟踪:
在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.CreateServiceAccessor(类型 serviceType e) 在 System.Collections.Concurrent.ConcurrentDictionary
2.GetOrAdd(TKey key, Func
2 valueFactory) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(类型 serviceType, ServiceProviderEngineScope serviceProviderEngineScope) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(类型 服务类型)在 Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(类型 服务类型)在 Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider 提供者)在 Inj.Program.Main(String[] args) 中 /Users/programmer/VSProjects/Inj/Inj/Program.cs:第 19 行
-
内部异常:
System.ArgumentException:外部组件已引发异常。 在 System.Globalization.CompareInfo.CompareString(ReadOnlySpan
1 string1, ReadOnlySpan
1 string2,CompareOptions 选项) System.Globalization.CompareInfo.Compare(字符串 string1,字符串 string2,CompareOptions 选项)在 System.Globalization.TextInfo.PopulateIsAsciiCasingSameAsInvariant() 在 System.Globalization.TextInfo.ChangeCaseCommon [TConversion](字符串 源) 在 System.Globalization.TextInfo.ToUpper(String str) 在 System.String.ToUpperInvariant() 在 System.Diagnostics.Tracing.EventSource.GetGuid(类型 eventSourceType) 在 System.Diagnostics.Tracing.EventSource..ctor(EventSourceSettings 设置,字符串 [] 特征)在 System.Diagnostics.Tracing.EventSource..ctor(EventSourceSettings 设置)在 Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource..ctor() 在 Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource..cctor()
【问题讨论】:
嗨 jimmy mac,InnerException
说了什么?
System.ArgumentException: External component has throw an exception 感谢您的快速回放
你拥有扩展方法IServiceCollection.AddLogging
吗? (如果有,可以分享一下吗?)
您是否在ConfigureServices
方法中解析ILoggerFactory
。或者,您直接在Configure
方法中注入ILoggerFactory
不,我没有任何扩展方法。 @IvanGarcíaTopete
【参考方案1】:
似乎问题与将应用程序作为 dll 运行有关,需要做的是将应用程序发布为目标平台的自包含可执行文件,所以在我的情况下,我刚刚使用 MacOs 10.14 在 Windows server 2012 R2 上发布以下命令(此命令不会直接发布到服务器,您需要将结果文件夹移动到服务器上的共享目录)
dotnet 发布 -c 发布 -r win10-x64
更好
dotnet publish -r win-x64 -c Release /p:PublishSingleFile=true
移动文件夹后,我运行了 .exe windows 可执行文件,现在它像魅力一样工作
【讨论】:
以上是关于ServiceProvider.GetService<Type> 每次使用都会抛出异常的主要内容,如果未能解决你的问题,请参考以下文章