每次使用ServiceProvider.GetService <Type>都会引发异常

时间:2019-10-29 18:15:26

标签: c# dependency-injection .net-core .net-core-3.0

我是整个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.Extensions.DependecnyInjection.DependencyInjectionEventSource的类型初始值设定项引发了异常

我一直在寻找解决方案,但没有找到任何解决方案。

修改1:

有关此错误的更多详细信息,希望它可以对您有帮助

  1. 异常消息:

      

    的类型初始值设定项   'Microsoft.Extensions.DependencyInjection.DependencyInjectionEventSource'   引发异常。

    1. StackTrace:
      在

      Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.CreateServiceAccessor(Type   serviceTyp e)在   System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory)位于   Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type   serviceType,ServiceP roviderEngineScope serviceProviderEngineScope)
      在   Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type   serviceType)在   Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type   serviceType)在   Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService [T](IServiceProvider   提供者)

         

    在Inj.Program.Main(String [] args)中   /Users/programmer/VSProjects/Inj/Inj/Program.cs:第19行

    1. InnerException:
      

    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](String   源)位于System.Globalization.TextInfo.ToUpper(String str),位于   System.String.ToUpperInvariant()位于   System.Diagnostics.Tracing.EventSource.GetGuid(Type eventSourceType)
      在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 :(得分:0)

问题似乎与将应用程序作为dll运行有关,需要做的是将应用程序发布为目标平台的自包含可执行文件,因此,就我而言,我刚刚使用MacOs 10.14在Windows Server 2012 R2上发布了该文件以下命令(此命令不会直接发布到服务器,您需要将结果文件夹移动到服务器上的共享目录)

  

dotnet发布-c版本-r win10-x64

更好

  

dotnet发布-r win-x64 -c版本/ p:PublishSingleFile = true

移动文件夹后,我运行了.exe Windows可执行文件,现在它就像魅力