Microsoft.StreamProcessing вызывает исключение при загрузке программы - PullRequest
0 голосов
/ 10 июня 2019

У меня довольно сложное торговое приложение, которое обрабатывает множество сообщений о событиях.Это приложение Windows MEF, которое автоматически загружает assemblies в runtime.

. Я решил попробовать Microsoft.StreamProcessing для преобразования событий в IStreamable.Я двигался медленными шагами.Сначала я просто добавил сборку через nuget к своему project.Затем добавил в код

using Microsoft.StreamProcessing;

, но не объявлял никаких типов.Работает нормально.

Далее я добавил одну строку к коду:

IStreamable<Empty, IQuote> markeDatatStream;

Это все, что я сделал.Я не использую его ни в коем случае, просто добавил эту строку.На этот раз, пока программа загружается, я получаю следующее исключение.Когда я заглядываю внутрь рекомендуемого поля LoaderExceptions, я получаю:

{"Could not load file or assembly 'System.Runtime.Loader, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.":"System.Runtime.Loader, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}

Если я удаляю единственную строку из кода

IStreamable<Empty, IQuote> markeDatatStream;

Работает нормально.

Полное исключение:

System.Reflection.ReflectionTypeLoadException
  HResult=0x80131602
  Message=Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
  Source=mscorlib
  StackTrace:
   at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
   at System.Reflection.Assembly.GetTypes()
   at System.ComponentModel.Composition.Hosting.AssemblyCatalog.get_InnerCatalog()
   at System.ComponentModel.Composition.Hosting.AssemblyCatalog.GetExports(ImportDefinition definition)
   at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
   at System.ComponentModel.Composition.Hosting.CatalogExportProvider.InternalGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
   at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExports(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
   at System.ComponentModel.Composition.Hosting.CatalogExportProvider.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
   at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.AggregateExportProvider.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
   at System.ComponentModel.Composition.Hosting.CompositionContainer.GetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ExportProvider.TryGetExportsCore(ImportDefinition definition, AtomicComposition atomicComposition, IEnumerable`1& exports)
   at System.ComponentModel.Composition.Hosting.ExportProvider.GetExports(ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ImportEngine.TryGetExports(ExportProvider provider, ComposablePart part, ImportDefinition definition, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ImportEngine.TrySatisfyImportSubset(PartManager partManager, IEnumerable`1 imports, AtomicComposition atomicComposition)
   at System.ComponentModel.Composition.Hosting.ImportEngine.TrySatisfyImportsStateMachine(PartManager partManager, ComposablePart part)
   at System.ComponentModel.Composition.Hosting.ImportEngine.TrySatisfyImports(PartManager partManager, ComposablePart part, Boolean shouldTrackImports)
   at System.ComponentModel.Composition.Hosting.ImportEngine.SatisfyImports(ComposablePart part)
   at System.ComponentModel.Composition.Hosting.CompositionServices.TryInvoke(Action action)
   at System.ComponentModel.Composition.Hosting.ComposablePartExportProvider.Compose(CompositionBatch batch)
   at Trader.MainForm.InitializeTradingEngine() in C:\Users\idf\Projects\Trader-Orig-Working\Trader\Trader\MainForm.cs:line 200
   at Trader.MainForm..ctor(String logFilePath) in C:\Users\idf\Projects\Trader-Orig-Working\Trader\Trader\MainForm.cs:line 113
   at Trader.Program.Main() in C:\Users\idf\Projects\Trader-Orig-Working\Trader\Trader\Program.cs:line 231

1 Ответ

1 голос
/ 13 июня 2019

Проблема здесь, вероятно, строгое именование .

В итоге:

Если включить библиотеку A со строгим именем и использовать библиотеку B со сборкой-версии 1.0.0.0, и вы используете библиотеку B, но с версией ассемблера 1.1.0.0 вы получите ошибки загрузки - с ошибкой "Система не может найти указанный файл"

Вам нужноСвязывание:

<dependentAssembly>
  <assemblyIdentity name="B"     publicKeyToken="32ab4ba45e0a69a1"     culture="en-us" />
  <bindingRedirect oldVersion="1.0.0.0" newVersion="1.1.0.0" />
</dependentAssembly>

Итак, кто-то выполняет сборку в вашем приложении System.Runtime.Loader, версия = 4.0.0.0, но вы, вероятно, (возможно, через другую библиотеку) предоставляете другую версию System.Runtime.Loader.

другой вариант - добавить версии System.Runtime.Loader в GAC

.
...