Сборка смешанного режима в .NET 4
-
02-10-2019 - |
Вопрос
Я написал библиотеку классов в .NET 2.0 для доступа к базе данных около 2 лет назад и использовал все это на .NET 2.0, 3.0 и 3.5.
В текущем проекте я работаю над (который представляет собой приложение .NET 4.0), попробовал использовать старую верующую библиотеку классов, и я получил следующее исключение:
System.invalidOperationException был необработанным сообщением = произошла ошибка, создавая форму. Смотрите Exception.innerexception для деталей. Ошибка: Сборка смешанного режима построена против версии «v2.0.50727» выполнения времени выполнения и не может быть загружена в среде выполнения 4.0 без дополнительной информации о конфигурации. Source = SchoolManager Stacktrace: в SchoolManager.my.myproject.myforms.create__Instance __ [T] (T экземпляра) в 17D14F5C-A337-4978-8C1071-53493378C1071.VB: Line 190 в SchoolManager.my.myproject.myforms.get_frmgreneric () на Schoolmanager.my.myaplication.oncreateMainform () В D: alex Documents Visual Studio 2008 Projects School Manager SchoolManager My Project Applys.designer.vb: линия 35 на Microsoft.visualBasic.Applicationservices.windowsFormsApplicationBase.OnRun ( ) в Microsoft.visualBasic.Applicationsurations.WindowsformsApplicationBase.DoApplicationModel () в Microsoft.visualBasic.Applicationservices.WINDOWSFORMSAPPLICATIONBASE.RUN (строка [] командная линия) в SchoolManager.my.myApplication.main (строка [] args) в 17D14F5C-A337-4978- 8281-53493378C1071.VB: линия 81 в System.Appdomain._nexecuteas см. (Runtimeass см. Сборка, строка [] args) в System.Appdomain.executeas см. (Строка сборки файла, доказательств сборки, строка [] args) в Microsoft.visualstudio.hostingProcess.hostProc. Ругая ERSAssAssembly () в System.threading.threadHelper.ThreadStart_context (состояние объекта) в System.Threading.executionContext.Run (ExecutionContext ExecutionContext, ContextCallback Changeback, состояние объекта, Boolean INGLOSENSYNCCTX) в System.threading.executionContext.run (ExecutionContext ExecutionContext, ContextCallback Callback , Состояние объекта) в System.threading.threadhelper.threadStart () Innerexception: System.io.fileloadexception Message = Сборка смешанного режима построена против версии «V2.0.50727» выполнения времени выполнения и не может быть загружена в среде выполнения 4.0 без дополнительной информации о конфигурации. Отказ Source = DinoFage.data.xpressdata Stacktrace: at dinofage.data.xpressdata.executeElectInternal (STRING SELECTCOMMAND) на DinoFage.data.xpressdata.execute.data.xpressdata. Visual Studio 2008 Проекты School Manager Schoolmanager Модули Academics.vb: линия 89 в SchoolManager.studentDetail..ctor () В D: Alex Documents Visual Studio 2008 Projects School Manager SchoolManager usercontrols StudentDetail.VB: Line 20 в SchoolManager.Frmgreneric.initializecomponent () в D: alex Documents Visual Studio 2008 Projects School Manager SchoolManager Frmgeneric.designer.vb: Линия 25 в SchoolManager.frmgreneric..tor () Innerexception:
Что может быть не так и как я это исправить?
Решение
Лучше всего будет перекомпилировать вашу классную библиотеку для .NET 4.0 в Visual Studio 2010 (т. Е. Открытие проекта, преобразование его и изменение целевой структуры.)
Если вы не можете, или не сделаете это, то вы можете попробовать добавить следующее в файл App.config для вашего приложения .NET 4.0:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
т.е.
<?xml version ="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Другие советы
Поскольку ваша сборка - это смешанный режим, он потенциально может позвонить управляемому коду из неуправляемого машинного кода в сборке. Благодаря новой поддержке входной стороны в процессе поддержки CLR в .NET 4.0 в .NET 4.0 время выполнения не знает, какая версия CLR должна быть предоставлена, когда это произойдет. Вы должны сказать, что с помощью файла App.exe.config, который должен выглядеть так:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Еще один способ: в VB 2010 Express вы можете открыть свой проект и перейти на вкладку Compile, а затем Advanced Compile Options...
. Отказ Выбирать .NET Framework 2.0
из раскрывающегося списка по имени Target framework (all configurations)
.
Если вы не проходите даже, даже указав USELEGCATYV2RUNTIMEACTICATICPOLICY = «TRUE», вам может потребоваться установить настройку, совместимую с вашей версией OS и .NET. Вы можете найти то же самое в http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki..
Перед установкой этой настройки удалите SQLite из установленных программ. Это покажет ошибки в вашем коде.
Если он не работает даже после установки совместимой установки, вы должны удалить ссылку на ваш предыдущий файл DLL и добавить новую ссылку на этот совместимый файл DLL.
Когда вы добавляете ссылку на совместимый файл DLL, вам просто нужно создать свой проект, и все ваши ошибки кода должны были понять.
Вы можете попробовать открыть старый верный проект (классную библиотеку) внутри Visual Studio 2010 и позволить ему сделать преобразование для вас.
Если кто-то еще вступит в эту проблему, вот мой диагноз: вы используете неправильный пакет SQLite. Есть много версий SQLite под http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki.
Например, если вы нацеливаете .NET 4.5 с X86 PLATRM, вы должны использовать этот файл:
При количестве предложенных статически связанных двоичных файлов для 32-битных Windows (.NET Framework 4.5)
sqlite-netfx45-static-binare-bundle-win32-2012-1.0.106.0.zip.zip.