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

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

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

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

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

Ответ 1

Чтобы использовать сборку смешанного режима 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) для загрузки сборки в смешанном режиме. Без этого это не сработает.

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

Ответ 2

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

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

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

Ответ 3

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

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>

Ответ 4

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

Ответ 5

Использование сборок 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. В веб-проекте добавьте это в файл web.config.

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

Ответ 6

Была ли возможность решить проблему, добавив параметр "запуска с помощью " 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>
  ......
....

Ответ 7

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

Измените файл sgen.exe.config в папке (сначала мне нужно было создать его); C:\Program Files (x86)\Microsoft SDK\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>

Ответ 8

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

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

in..\Microsoft Visual Studio 10.0\Common7\IDE\ Файл WcfSvcHost.exe.config

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

Ответ 9

Я столкнулся с этой проблемой, когда изменился на 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 SDK\Windows\v10.0A\bin\NETFX 4.6 Инструменты

Ответ 10

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

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

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

Ответ 11

У меня возникла эта проблема при обновлении до 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.

Ответ 12

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

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

Если это не решит вашу проблему, тогда → В ссылках на проект Right Click on DLL, где вы получаете ошибку → Select PropertiesCheck 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-ссылки, тогда она будет работать.

Ответ 13

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

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

Ответ 14

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

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

Ответ 15

Добавьте в это место следующее: C:\Program Files (x86)\Microsoft SDK\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>

Ответ 16

Я использую

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

Он работает, но только перед тегом de, иначе тег запуска не работает должным образом

Ответ 17

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

<startup useLegacyV2RuntimeActivationPolicy="true">

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