升级到Core 2.1和Framework 4.7.2后,为什么在ServiceStack中会收到TypeIntializer异常?

时间:2018-10-03 22:34:00

标签: c# .net .net-core servicestack .net-framework-version

我们有一个Visual Studio C#解决方案,其中包含多个项目,包括.NET Standard类库,.NET Framework应用程序(因为它们使用在Framework上编写的第三方引用)和.NET Core应用程序。

以前这些项目使用过:

  • .NET Standard 2.0
  • .NET Core 2.0
  • .NET Framework 4.6.1
  • ServiceStack 5.1.0

我们不得不做一些奇怪的事情。我们拥有托管ServiceStack服务的.NET Core应用程序,还有具有ServiceStack客户端的.NET Framework应用程序,并且两个应用程序都在引用包含ServiceStack请求对象的.NET Standard类库。不幸的是,ServiceStack模块的Framework和Core版本不兼容,尤其是在Interfaces组件中。因此Framework应用程序必须引用ServiceStack。*。Core DLL(因此mythz告诉我们,它解决了问题)。

现在我们已将代码升级到

  • .NET Standard 2.0
  • .NET Core 2.2
  • .NET Framework 4.7.2
  • ServiceStack 5.4.0

代码可以很好地编译,但是当我们运行它时,我们无法在Framework应用程序中实例化JsonServiceClient。

  using (var client = new JsonServiceClient(_config.PropagationUrl))
  {
     ...
  }

以上代码的第一行抛出以下异常:

System.TypeInitializationException     HResult = 0x80131534     Message =“ ServiceStack.ServiceClientBase”的类型初始值设定项引发了异常。     源= ServiceStack.Client     堆栈跟踪:      在ServiceStack.ServiceClientBase..ctor()      在ServiceStack.JsonServiceClient..ctor(String baseUri)      在C:\ Work \ TMobile \ stitch \ src \ Stitch.Logic \ Coverage \ Actors \ ExtentsActor.cs:line 75

中的Stitch.Logic.Coverage.ExtentsActor.PostCellExtentRequest(CellExtentsRequest请求)处

内部异常1:   TypeInitializationException:“ ServiceStack.Text.Env”的类型初始值设定项引发了异常。

内部异常2:   FileNotFoundException:无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation,版本= 4.0.2.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。系统找不到指定的文件。

内部异常3:   FileNotFoundException:无法加载文件或程序集“ System.Runtime.InteropServices.RuntimeInformation,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。

谁能告诉我原因,更重要的是,如何解决此问题?

1 个答案:

答案 0 :(得分:2)

这是一个具有约束力的问题,请先尝试adding or removing the Assembly binding information for System.Runtime.InteropServices.RuntimeInformation

<dependentAssembly>
  <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>

如果仍不能解决,请尝试删除所有ServiceStack NuGet程序包和程序集绑定,删除/packages/bin/obj文件夹,然后再次添加ServiceStack NuGet程序包。 / p>