Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

TypeLoadException ?

248  
Murr патриот21.09.18 12:51
Murr
NEW 21.09.18 12:51 

Не понимаю.

Есть сборка. В сборке есть статический класс.

Ссылка на сборку есть и ошибок компиляции нет. Код формата 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'.


Подписывать сборку не хочется - надо будет подписывать еще полсотни проектов...


И вроде еще даже вчера работало...

#1 
Программист коренной житель21.09.18 12:56
Murr патриот21.09.18 13:23
Murr
NEW 21.09.18 13:23 
в ответ Программист 21.09.18 12:56

Немного не то...

Видимо, выбрал не ту дллку для транзакций... она для х86... а оракловские у меня х64...

надо искать какую транзакционку вешать...

#3 
Murr патриот21.09.18 13:25
Murr
NEW 21.09.18 13:25 
в ответ Murr 21.09.18 13:23

Да, если кому поможет - вспомогательный инструмент - DUMBIN.EXE

Среди параметров есть /headers - там куча информации по дллке, в том числе и целевая система.

Запускать из под Студио Kомманд Промпт...

#4 
Murr патриот21.09.18 13:29
Murr
NEW 21.09.18 13:29 
в ответ Murr 21.09.18 13:23

Не-а... не оно...

#5 
Murr патриот21.09.18 13:49
Murr
NEW 21.09.18 13:49 
в ответ Murr 21.09.18 13:29, Последний раз изменено 21.09.18 13:51 (Murr)

'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


Что же оно хочет то?


В логах пусто - никаких записей об проблемах ни с моей дллкой, ни с тестами...

#6 
Murr патриот21.09.18 15:40
Murr
NEW 21.09.18 15:40 
в ответ Murr 21.09.18 13:49

Чудны дела твои, билли....


Создал новый проект, создал новый тестовый проект, долепилл ссылки и перекинул нужные тесты...

... и все пошло с полпинка...


Теперь надо разбираться с "The missing .Net Framework Data Provider's assembly qualified name is required."

Где-то у DataRow незаладиось со ссылкой на провайдера...

#7 
Murr патриот21.09.18 16:42
Murr
NEW 21.09.18 16:42 
в ответ Murr 21.09.18 15:40

Блин, как же все же регистрировать нового провайдера?

В ГАЦ его класть пока не хочется....

#8 
Murr патриот24.09.18 14:00
Murr
NEW 24.09.18 14:00 
в ответ Murr 21.09.18 16:42

Не понимаю.

Библиотека (дллка), В библиотеке - единственный класс наследованный от System.Data.Common.DbProviderFactory

Какого черта он не находится?

Точно такое же для скллигхт - работает....

Подписи ждет?

#9 
Murr патриот24.09.18 16:00
Murr
NEW 24.09.18 16:00 
в ответ Murr 24.09.18 14:00

Японский городовой!!!

Вот такая проверочка в загрузке:


System.Reflection.FieldInfo providerInstance = providerType.GetField("Instance", System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);


Так этого мало - надо еще и инициализированную проперть... просто проверить тип и инстанцировать класс - это не для билли...

#10 
Murr патриот24.09.18 16:29
Murr
NEW 24.09.18 16:29 
в ответ Murr 24.09.18 16:00

Да, может кому-то еще пригодится.


Там, где для DbProviderFactories

упоминается возможность загрузки по DataRow

там подразумевается, что это строка из таблицы, сформированной из данных конфига.


По загрузке из коннецтиона - там есть такая пара пропертей у коннецтион:

        virtual protected DbProviderFactory DbProviderFactory {
            get {
                return null;
            }
        }
 
        internal DbProviderFactory ProviderFactory {
            get {
                return DbProviderFactory;
            }
        }

Если не переопределить - задница в засаде... А переопределить - пол .Нета перепахать...


Так что реальная возможность создать фабрику - одна - по инвариантному имени (строке).

#11 
Murr патриот25.09.18 16:57
Murr
NEW 25.09.18 16:57 
в ответ Murr 24.09.18 16:29

Еще одна привета от билли...


Смотрим тут:

https://referencesource.microsoft.com/#System.Configuratio...


Интересующая в написании часть:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();

configMap.ExeConfigFilename = pConfigFilename;

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None, true);


В соурснике она ЕСТЬ!!!!

пля, кудЫ же она продевалась в релизах?


Ну или вопрос - как указать другой файл в качестве конфигурационного и как потом дозагрузить еще один для переписывания текущих значений?

И чтобы все это работало стандартно через ресы и КонфигуратионМанагер?



#12