TypeLoadException ?
Не понимаю.
Есть сборка. В сборке есть статический класс.
Ссылка на сборку есть и ошибок компиляции нет. Код формата AnyCPU.
Тем не менее при попытке загрузки сборки имеем:
Test Name: TDbProviderFactories_GetFactory_DataRow
Test FullName: Tests.TDbProviderFactories_Tests.TDbProviderFactories_GetFactory_DataRow
Test Source: E:\*\FunctionTests\DbProviderFactory\DbProviderFactory.Tests\TDbProviderFactories.cs : line 16
Test Outcome: Failed
Test Duration: 0:00:00.2588208
Result StackTrace: at Tests.TDbProviderFactories_Tests.TDbProviderFactories_GetFactory_DataRow()
Result Message:
Test method Tests.TDbProviderFactories_Tests.TDbProviderFactories_GetFactory_DataRow threw exception:
System.TypeLoadException: Could not load type 'DbProviderFactories' from assembly 'DbProviderFactory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Подписывать сборку не хочется - надо будет подписывать еще полсотни проектов...
И вроде еще даже вчера работало...
'vstest.executionengine.exe' (CLR v4.0.30319: UnitTestAdapter: Running test): Loaded 'C:\windows\assembly\GAC_64\Oracle.DataAccess\2.102.4.0__89b483f429c47342\Oracle.DataAccess.dll'. Module was built without symbols.
'vstest.executionengine.exe' (CLR v4.0.30319: UnitTestAdapter: Running test): Loaded 'C:\windows\Microsoft.Net\assembly\GAC_64\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll'. Cannot find or open the PDB file.
Exception thrown: 'System.TypeLoadException' in mscorlib.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
Exception thrown: 'Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestFailedException' in Microsoft.VisualStudio.TestPlatform.Extensions.VSTestIntegration.dll
Exception thrown: 'Microsoft.VisualStudio.TestPlatform.MSTestFramework.TestFailedException' in Microsoft.VisualStudio.TestPlatform.Extensions.VSTestIntegration.dll
Что же оно хочет то?
В логах пусто - никаких записей об проблемах ни с моей дллкой, ни с тестами...
Чудны дела твои, билли....
Создал новый проект, создал новый тестовый проект, долепилл ссылки и перекинул нужные тесты...
... и все пошло с полпинка...
Теперь надо разбираться с "The missing .Net Framework Data Provider's assembly qualified name is required."
Где-то у DataRow незаладиось со ссылкой на провайдера...
Японский городовой!!!
Вот такая проверочка в загрузке:
System.Reflection.FieldInfo providerInstance = providerType.GetField("Instance", System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
Так этого мало - надо еще и инициализированную проперть... просто проверить тип и инстанцировать класс - это не для билли...
Да, может кому-то еще пригодится.
Там, где для DbProviderFactories
упоминается возможность загрузки по DataRow
там подразумевается, что это строка из таблицы, сформированной из данных конфига.
По загрузке из коннецтиона - там есть такая пара пропертей у коннецтион:
virtual protected DbProviderFactory DbProviderFactory { get { return null; } } internal DbProviderFactory ProviderFactory { get { return DbProviderFactory; } }
Если не переопределить - задница в засаде... А переопределить - пол .Нета перепахать...
Так что реальная возможность создать фабрику - одна - по инвариантному имени (строке).
Еще одна привета от билли...
Смотрим тут:
https://referencesource.microsoft.com/#System.Configuratio...
Интересующая в написании часть:
ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();configMap.ExeConfigFilename = pConfigFilename;
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None, true);
В соурснике она ЕСТЬ!!!!
пля, кудЫ же она продевалась в релизах?
Ну или вопрос - как указать другой файл в качестве конфигурационного и как потом дозагрузить еще один для переписывания текущих значений?
И чтобы все это работало стандартно через ресы и КонфигуратионМанагер?