.NET Framework 4.0 со сборками, использующими 2.0 - PullRequest
4 голосов
/ 08 декабря 2010

У меня есть проект Windows Form, встроенный в .NET 4.0.И это относится к DLL System.Data.SQLite, которая встроена в .NET 2.0.Когда мой exe-файл развернут на моем клиенте, который устанавливает только .NET Framework 4.0 на своем компьютере (Windows XP), exe-файл вылетает.

Как заставить EXE загрузить указанную DLL-библиотеку в CLR 4.0 (хотяон построен для использования CLR 2.0), поэтому без установленного .NET Framework 2.0 он все еще может работать?

Ответы [ 3 ]

4 голосов
/ 08 декабря 2010

Установите useLegacyV2RuntimeActivationPolicy на true в вашем app.config ( больше информации ).

У меня есть больше информации о SQLite в .NET 4 (особенно с EF4) в моем блоге .

1 голос
/ 09 декабря 2010

John

У меня тоже были проблемы с настройкой SQLite, который я использую с NHibernate, в отличие от EntityFramework (я думаю , что в последнем выпуске EF мог бы рассмотреть больше, не уверен). Вот то, что в настоящее время работает для меня.

1) измените app.config, как говорит Стивен, но также добавьте директиву времени выполнения по причине, указанной в комментариях ниже.

2) сопоставьте вашу целевую платформу сборки с dll, которая в первую очередь соответствует вашим потребностям. Будет работать 64x или 86x, но AnyCpu получает какое-то явное исключение. Я неохотно пользуюсь x86, потому что он безопаснее и не оказывает заметного влияния на все, что я с ним делаю.

В какой-то момент вам даже может пригодиться создание отдельных проектов для изоляции проблем с зависимостями в последнем выпуске (я думаю, это был апрель). Не ожидайте, что многое сделаете с любыми представлениями WPF через Visual Studio, так как дизайнер XAML просто не будет счастлив. Это быстро и приятно, как только вы начнете, но последний выпуск не составляет труда.

НТН,
Berryl

Полные дополнения конфигурации приложения

<!-- SQLite requires this mixed mode load setting-->
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

<runtime>
    <loadFromRemoteSources enabled="true"/>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

    <!-- SQLite is built with older System.Data so we need this redirect -->       
    <dependentAssembly>
        <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
        <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
    </dependentAssembly>

    </assemblyBinding>
</runtime>
0 голосов
/ 08 декабря 2010

Установите для .Net 4 полный профиль, см. Здесь msdn.microsoft.com/en-us/library/cc656912.aspx

Щелкните правой кнопкой мыши на Project> Proeprties> вкладка Compile> Advanced Compile Options> Target.Фреймворк.Убедитесь, что он не установлен на .Net Client> установите его на .Net 4 (Full)

Редактировать: .NET Framework в целом имеет обратную совместимость, и вы можете настроить поддерживаемые среды выполнения, см. Здесь http://social.msdn.microsoft.com/forums/en-US/clr/thread/de5956f6-7a12-45d8-ae03-988ad8434a17

Что касается аварийного EXE-файла, я предполагаю, что это исключение второго шанса (то есть, которое не может обработать отладчик), так что вы можете захотеть взять дамп памяти и использовать WinDBG для! Анализ дампа памяти и поискаточную причину, если, конечно, в сообщении об исключении второго шанса не указан System.Data.SQLite в качестве проблемы DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...