У меня есть проект, который использует QuickFix. Net и Autofa c. Один из моих тестов xUnit создает контейнер для приложения и пытается разрешить один из основных экземпляров службы. Я создал этот тест как регрессионный тест, чтобы определить, когда я забываю регистрацию Autofa c.
Эти тесты недавно начали проваливаться, и странно то, что они жалуются на тип и сборку, которые я не использую. Не думаю, что мой код или сторонний код ссылаются. Autofa c не может создать экземпляр Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.ITestExecutionEnvironmentSpecifier
при попытке создать экземпляр QuickFix.SocketInitiator
. Я посмотрел на источник в GitHub для DefaultMessageFactory и вижу, что для получения сборок используется отражение, но это было там долгое время, поэтому я не думаю, что оно новое.
Я думаю, что это могло начаться, когда я обновил Visual Studio, но я не уверен. Может ли это быть ошибкой в Visual Studio 2019?
Тест не пройден, независимо от того, запускаю ли я его непосредственно в Visual Studio или с помощью теста do tnet из командной строки, поэтому я не уверен.
Если у кого-то есть понимание, я был бы признателен
Редактировать: Вот некоторая дополнительная информация
- Framework Target:. Net Core 2.2
- Visual Studio: 16.3.4 с Resharper Ultimate 2019.2.3
- Autofa c Версия: 4.9.0
- XUnit Framework: 2.4.1
Вот некоторые вещи, которые я пробовал без успеха:
- Добавление ссылки NuGet на 15.0 Microsoft.VisualStudio.TestPlatform.ObjectModel.dll для моей тестовой DLL, чтобы увидеть, не приведет ли это к ее включению и всем ее зависимостям во время выполнения.
- Обновление до версии 16.4 той же библиотеки, это вызвало тихую ошибку при попытке запустить модульные тесты через ReSharper.
- Обновление других зависимостей в моем проекте.
Вот основная часть трассировки стека:
Autofac.Core.DependencyResolutionException : An exception was thrown while activating MyApp.FixConnector.FixConnectorService -> QuickFix.Transport.SocketInitiator.
---- Autofac.Core.DependencyResolutionException : An exception was thrown while invoking the constructor 'Void .ctor(QuickFix.IApplication, QuickFix.IMessageStoreFactory, QuickFix.SessionSettings, QuickFix.ILogFactory)' on type 'SocketInitiator'.
-------- System.TypeLoadException : Could not load type 'Microsoft.VisualStudio.TestPlatform.ObjectModel.DataCollection.ITestExecutionEnvironmentSpecifier' from assembly 'Microsoft.VisualStudio.TestPlatform.ObjectModel, Version=15.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget) in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 135
at Autofac.Core.Resolving.InstanceLookup.Execute() in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 83
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, IComponentRegistration registration, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Resolving\ResolveOperation.cs:line 131
at Autofac.Core.Resolving.ResolveOperation.Execute(IComponentRegistration registration, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Resolving\ResolveOperation.cs:line 84
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 1041
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 871
at Autofac.ResolutionExtensions.Resolve[TService](IComponentContext context, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\ResolutionExtensions.cs:line 300
at MyApp.Tests.Unit.FixConnector.FixConnectorDependencyInjectionTest.TestBuildContainer(String feedName, String feedEnvironment) in C:\dev\MyApp\MyApp.Tests\Unit\FixConnector\FixConnectorDependencyInjectionTest.cs:line 38
----- Inner Stack Trace -----
at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ConstructorParameterBinding.cs:line 137
at Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters) in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ReflectionActivator.cs:line 120
at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable`1 parameters, Object& decoratorTarget) in C:\projects\autofac\src\Autofac\Core\Resolving\InstanceLookup.cs:line 117
----- Inner Stack Trace -----
at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)
at System.Reflection.RuntimeAssembly.GetExportedTypes()
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at QuickFix.DefaultMessageFactory.GetMessageFactories(IEnumerable`1 assemblies)
at QuickFix.DefaultMessageFactory..ctor(String defaultApplVerId)
at QuickFix.AbstractInitiator..ctor(IApplication app, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory, IMessageFactory messageFactory)
at QuickFix.Transport.SocketInitiator..ctor(IApplication application, IMessageStoreFactory storeFactory, SessionSettings settings, ILogFactory logFactory)
at lambda_method(Closure , Object[] )
at Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() in C:\projects\autofac\src\Autofac\Core\Activators\Reflection\ConstructorParameterBinding.cs:line 129