На какую "дополнительную конфигурацию" необходимо ссылаться 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 503

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

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

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

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

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

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

поэтому, если вы получаете ошибку в приложении 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. В веб-проекте добавьте это в 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>

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

<?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 пакет SDK папке\Windows\В8.0А\бин\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 является зависимостью, которая была загружена WcfSvcHost.exe затем вы должны включить

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

in ..\Microsoft Visual Studio 10.0\Common7\IDE\ WcfSvcHost.исполняемый.конфигурации file

таким образом, 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 Tools

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

<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.Управляемый.исполняемый.конфигурации

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

<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">

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