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

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

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

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

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

16 ответов


для использования CLR 2.0 сборка в смешанном режиме, вам нужно изменить свое приложение.Файл конфигурации для включения:

<?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 file, visual studio создаст копию в папке bin с именем App.исполняемый.config. Скопируйте это в каталог приложений во время развертывания. Звучит очевидно, но удивительно, что многие люди пропускают этот шаг. Разработчики WinForms не используются для настройки файлов :).


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

порядок поддерживаемых деклараций фреймворка в приложении.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. В веб-проекте добавьте это в web.конфигурационный файл.

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

смог решить проблему, добавив "Автозагрузка" элемент "useLegacyV2RuntimeActivationPolicy" набор атрибутов.

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

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

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

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

отредактируйте sgen.исполняемый.файл конфигурации в папке (сначала мне пришлось создать один); C:\Program файлы (x86)\Microsoft SDKs\Windows\v8.0a\bin\NETFX 4.0 инструменты (Есть также один в 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>

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

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

in ..\Microsoft Visual Studio 10.0\Common7\IDE\ WcfSvcHost.исполняемый.config

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


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

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

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

C:\Program файлы (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>

to: C:\Program файлы (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\TE.ProcessHost.Управляемый.исполняемый.config

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


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

<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 ссылка тогда будет работать.


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

удаление нарушителя лицензии.файл licx, похоже, исправил проблему.


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

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

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

 <?xml version ="1.0"?>

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

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

Это решение проблемы


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

<startup useLegacyV2RuntimeActivationPolicy="true">

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