Почему мы получаем исключение TypeIntializer в ServiceStack после обновления до Core 2.1 и Framework 4.7.2? - PullRequest
0 голосов
/ 04 октября 2018

У нас есть решение 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

Мы должны были сделать что-то странное.У нас были приложения .NET Core, на которых размещались сервисы ServiceStack, и приложение .NET Framework, являющееся клиентами ServiceStack, и оба приложения ссылались на библиотеку классов .NET Standard, содержащую объекты Request для ServiceStack.К сожалению, версии Framework и Core модулей ServiceStack были несовместимы, особенно в компоненте Interfaces.Таким образом, приложение Framework должно было ссылаться на DLL-файлы ServiceStack. *. Core (так, как нам сказал mythz, и это решило проблему).

Теперь мы обновили наш код до

  • .NETСтандартный 2.0
  • .NET Core 2.2
  • .NET Framework 4.7.2
  • ServiceStack 5.4.0

Код компилируется просто отлично, нокогда мы запускаем его, мы не можем создать экземпляр JsonServiceClient в приложении Framework.

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

В первой строке приведенного выше кода выдается следующее исключение:

System.TypeInitializationException HResult = 0x80131534 Message =Инициализатор типа для ServiceStack.ServiceClientBase вызвал исключение.Source = ServiceStack.Client StackTrace: в ServiceStack.ServiceClientBase..ctor () в ServiceStack.JsonServiceClient..ctor (String baseUri) в Stitch.Logic.Coverage.ExtentsActor.PostCellExtentRequest (запрос CellExtentsRequest \ Work \ st \ st \ \ \ Work \ st \ \ \ Work \ st \ \ \ \ \ work \ st \\ src \ Stitch.Logic \ Coverage \ Actors \ ExtentsActor.cs: строка 75

Внутреннее исключение 1: TypeInitializationException: инициализатор типа для 'ServiceStack.Text.Env' вызвал исключение.

Внутреннее исключение 2: FileNotFoundException: не удалось загрузить файл или сборку 'System.Runtime.InteropServices.RuntimeInformation, Version = 4.0.2.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a' или одну из ее зависимостей.Системе не удается найти указанный файл.

Внутреннее исключение 3: FileNotFoundException: не удалось загрузить файл или сборку 'System.Runtime.InteropServices.RuntimeInformation, версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a' илиодна из его зависимостей.Система не может найти указанный файл.

Может кто-нибудь сказать мне, почему и, что более важно, как это исправить?

1 Ответ

0 голосов
/ 04 октября 2018

Это проблема привязки, попробуйте сначала либо добавить или удалить информацию о привязке сборки для 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.

...