Какая "дополнительная конфигурация" необходима для ссылки на сборку смешанного режима.NET 2.0 в проекте.NET 4.0?

У меня есть проект, в котором я хотел бы использовать некоторые функции.NET 4.0, но основное требование заключается в том, что я могу использовать платформу System.Data.SQLite, скомпилированную с 2.X. Я вижу упоминание о том, что это возможно, например, принятый ответ, но я не вижу, как на самом деле этого добиться.

Когда я просто пытаюсь запустить свой проект 4.0, ссылаясь на сборку 2.X, я получаю:

Сборка в смешанном режиме выполняется на основе версии v2.0.50727 среды выполнения и не может быть загружена в среде выполнения 4.0 без дополнительной информации о конфигурации.

Какая "дополнительная конфигурация" необходима?

16 ответов

Решение

Чтобы использовать сборку в смешанном режиме CLR 2.0, необходимо изменить файл App.Config, включив в него:

<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

Ключ является useLegacyV2RuntimeActivationPolicy флаг. Это заставляет CLR использовать последнюю версию (4.0) для загрузки вашей сборки в смешанном режиме. Без этого не получится.

Обратите внимание, что это имеет значение только для сборок в смешанном режиме (C++/CLI). Вы можете загрузить все управляемые сборки CLR 2, не указывая это в app.config,

Это сообщение на форуме в Центре разработчиков.NET Framework. Это может дать некоторое представление.

(Добавьте в файл конфигурации приложения.)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

В зависимости от того, на какую версию платформы вы нацеливаетесь, вы можете посмотреть здесь, чтобы получить правильную строку:

http://msdn.microsoft.com/en-us/library/ee517334.aspx

Я потратил впустую часы, пытаясь выяснить, почему для моего выпуска.Net 4.0 клиенту требовалась полная версия. Я использовал это в конце концов:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

После установки файла app.config Visual Studio сгенерирует копию в папке bin с именем App.exe.config. Скопируйте это в каталог приложения во время развертывания. Звучит очевидно, но удивительно, что многие люди пропускают этот шаг. Разработчики WinForms не используются для настройки файлов:).

Совместное использование сборок 2.0 и 4.0 не совсем просто.

ORDER поддерживаемых деклараций платформы в app.config фактически влияет на исключение выбрасываемого смешанного режима. Если вы измените порядок декларации, вы получите ошибку смешанного режима. Это цель этого ответа.

Так что, если вы получаете ошибку в приложении Windows Forms, попробуйте это, в основном, приложения Windows Forms.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

Или если проект не Windows Form. В веб-проекте добавьте это в файл we b.config.

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

Удалось решить проблему, добавив элемент "startup" с набором атрибутов "useLegacyV2RuntimeActivationPolicy".

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

Но он должен был поместить его в качестве первого дочернего элемента тега конфигурации в App.config, чтобы он вступил в силу.

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

Если вы работаете в веб-сервисе, а сборка v2.0 является зависимостью, которая была загружена WcfSvcHost.exe, вы должны включить

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
</startup>

в.. \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ WcfSvcHost.exe.config файл

Таким образом, Visual Studio сможет отправлять нужную информацию через загрузчик во время выполнения.

Вышесказанное не сработало для меня (я работаю над веб-приложением) - но это сработало...

Отредактируйте файл sgen.exe.config в папке (сначала мне пришлось его создать); C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools (в папке v7.0 также есть один, но мне не нужно было его менять, я использую VS2012)

Содержимое XML должно выглядеть следующим образом (то же самое в предыдущих ответах)

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>

Я столкнулся с этой проблемой, когда мы перешли на Visual Studio 2015. Ни один из приведенных выше ответов не работал для нас. В итоге мы заработали, добавив следующий конфигурационный файл ко всем исполняемым файлам sgen.exe на компьютере.

<?xml version ="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" />
        </startup>    
</configuration>

Особенно в этом месте, даже когда мы ориентировались на.NET 4.0:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Инструменты

Я использовал этот конфиг:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0"/>
    <supportedRuntime version="v4.0"/>
</startup>

Работал для меня

У меня была эта проблема при обновлении до Visual Studio 2015, и ни одно из решений, опубликованных здесь, не имело никакого значения, хотя конфигурация верна, расположение для изменения - нет. Я исправил эту проблему, добавив эту конфигурацию:

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

Кому: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Managed.exe.config

Затем перезапустил Visual Studio.

Я столкнулся с аналогичной проблемой при переносе некоторого кода с VS 2008 на VS 2010. Внесение изменений в файл App.config решило эту проблему для меня.

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>

Я столкнулся с этой же ошибкой и потратил целую вечность, добавляя предложенные операторы запуска в различные файлы конфигурации в моем решении, пытаясь изолировать несоответствие платформы. Ничего не сработало. Я также добавил информацию о запуске в мои схемы XML. Это тоже не помогло. Глядя на фактический файл, который вызывал проблему (которая только сказала бы, что он был "перемещен или удален"), обнаружилось, что это на самом деле компилятор лицензий (LC).

Удаление поврежденного файла licenses.licx, похоже, решило проблему.

Добавьте следующее в этом месте C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\x64 FileName: sgen.exe.config(Если вы не нашли этот файл, создайте и добавьте его)

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

Это решило проблему

Я использую

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

Это работает, но незадолго до де </configuration> тег, иначе тег запуска не работает должным образом

Я нашел способ обойти это после 3-4 часов поиска в Google. Я добавил следующее

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

Если это не решит вашу проблему, тогда -> В Проекте Ссылки Right Click on DLL где вы получаете ошибку -> Select Properties-> Check the Run-time Version -> Если это v2.0.50727 тогда мы знаем проблему. Проблема в том, что: 2.0 Version of respective DLL. Решение:- Вы можете delete the respective DLL из ссылок проекта, а затем download the latest version of DLL's с соответствующего веб-сайта и добавьте ссылку на DLL-версию последней версии, тогда она будет работать.

Также у меня была эта проблема с библиотекой классов, если у кого-то есть проблема с библиотекой классов, добавленной в ваше основное приложение. Просто добавь

<startup useLegacyV2RuntimeActivationPolicy="true">

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

Другие вопросы по тегам