Вопрос

Я написал библиотеку классов в .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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top