Яка «додаткова конфігурація» необхідна для посилання на збірку змішаного режиму .NET 2.0 у проекті .NET 4.0?


525

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

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

Збірка змішаного режиму побудована на основі версії 'v2.0.50727' під час виконання і не може бути завантажена в режимі виконання 4.0 без додаткової інформації про конфігурацію.

Яка «додаткова конфігурація» необхідна?




ВАЖЛИВО: Якщо помилка трапиться із стовпцем помилки як "Файл" як SGEN, то виправлення має бути у файлі sgen.exe.configпоруч із sgen.exe. Наприклад, для VS 2015 створити C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config. Джерело: Збірка змішаного режиму SGEN Мінімальний вміст файлу:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

Відповіді:


685

Для того, щоб використовувати збірку 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.


@Reed Я спробував вашу пропозицію, але виняток все-таки спливає. Я двічі перевірив додаток app.config, який копіюється в папку EXE, і він все ще не працює. Він з'являється при використанні log4net. Я не можу знайти нічого про цю помилку re: log4net, за винятком тут: stackoverflow.com/questions/1866735/log4net-and-net-4-0 , але це не говорить дуже багато. Будь-які ідеї щодо того, як я можу отримати більше інформації щодо мого конкретного питання?
Дейв

@Dave: Це говорить про те, що ви можете просто використовувати рідну версію log4net .NET 4 - це здається найкращим варіантом. Якщо є версія .NET 4, використовуйте її ...
Reed Copsey

@Reed немає жодної, і я фактично інтерпретував цю відповідь, що означає, що вам доведеться самостійно скласти log4net. Я думаю, що я можу це зробити, але я б краще просто взяти їх попередньо складений бінарний файл і віднести його до свого проекту. Я ще раз розберуся в цьому. Але ви можете подумати, чому зміна app.config не працює? Я думав, що, можливо, мені доведеться використовувати programname.exe.config, але я теж спробував це, і це не вийшло. За моїм обмеженим досвідом, будь-яке ім'я файлу робить те саме.
Дейв

19
Що допомогло мені, це розміщення цього рядка у конфігураційному файлі NUnit : <startup useLegacyV2RuntimeActivationPolicy = "true"> <supportRuntime version = "v4.0" /> <RequRuntime version = "v4.0.20506" /> </startup>
Filip Zawada

76
Майкрософт повинен створити кнопку у діалоговому вікні винятків: "Шукати це повідомлення про виключення на
stackoverflow

35

Це повідомлення на форумі в Центрі розробників .NET Framework. Це може дати деяке розуміння.

(Додати в конфігураційний файл програми.)

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

2
Як цю конфігурацію програми слід використовувати для складання NANT?
сагар

14

Залежно від версії рамки, на яку ви орієнтуєтесь, ви можете подивитися тут, щоб отримати правильний рядок:

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>

11

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


Ще один спосіб - видалити app.config, а потім додати новий з Project-> Add-> New item та вибрати General-> File Configuration File (що не те саме, що просто створити текстовий файл під назвою app.config)
smirkingman

8

Використання збірок 2.0 і 4.0 разом не зовсім прямо.

ЗАМОВЛЕННЯ підтримуваних декларацій фреймворку в 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. У веб-проект додайте це до файлу web.config.

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

7

Вдалося вирішити проблему, додавши елемент "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>
  ......
....

1
Що сталося з тим, з version="v2.0"ким?
СамБ

1
Номер версії необхідний для 2.0, але не для 4.0, тому верхня версія є неправильною. Дно правильне.
ickydime

5

Вищезгадане не працювало для мене (я працюю над веб-додатком) - але це зробило ...

Відредагуйте файл sgen.exe.config у папці (мені довелося створити один спочатку); C: \ Program Files (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>

5

Якщо ви працюєте у веб-службі, а збірка v2.0 є залежністю, завантаженою WcfSvcHost.exe, тоді ви повинні включити

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

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

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


4

Я зіткнувся з цим питанням, коли ми змінили Visual Studio 2015 . Жодна з наведених відповідей не працювала для нас. Зрештою, ми працювали, додавши наступний конфігураційний файл до ВСІХ виконуваних файлів sgen.exe на машині

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

Особливо в цьому місці, навіть коли ми орієнтувалися на .NET 4.0:

C: \ Програмні файли (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Інструменти


ти можеш бути більш конкретним? Ви маєте на увазі, що ви додали ці параметри конфігурації до всіх існуючих файлів * .config або створили файл .config для sgen.exe?
Адам Спайсер

По моєму у мене виникли проблеми з тестовими проектами Visual Studio 2015. Цей пост мені допоміг. devbraindump.wordpress.com/2015/07/29/hello-world
Адам Спайсер,

1
@AdamSpicer Ми додали це до всіх .config файлів усіх sgen.exe. Якщо такого не існувало, ми створили його.
Виконати CMD

3

Я використовував цю конфігурацію:

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

Працювали для мене


3
має бути v2.0.50727, для версії v2.0 потрібне число збірки, але для версії v4.0 номер зборки не потрібен
зв’язати

1

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

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

До: C: \ Файли програми (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ TE.ProcessHost.Managed.exe.config

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


0

Я знайшов спосіб цього через 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 на останню версію, тоді воно буде працювати.


1
Це виправить це, оскільки ви припускаєте, що остання версія DLL складена проти нової версії .NET?
Лукас

0

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

Видалення ображеного файла licenses.licx, здається, вирішило проблему.


0

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

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

0

Додати в цьому місці C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Інструменти \ x64 Ім'я файлу: sgen.exe.config (Якщо ви не знайдете цей файл, створіть і додайте його)

 <?xml version ="1.0"?>

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

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

Це вирішило проблему


0

Я використовую

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

Це працює, але безпосередньо перед тим, як де- </configuration>тег, інакше тег запуску не працює належним чином


-1

Також у мене була ця проблема з бібліотекою класів, якщо у когось є проблема з бібліотекою класів, доданою до вашої основної програми. Просто додайте

<startup useLegacyV2RuntimeActivationPolicy="true">

до вас головне додаток, яке потім буде обрано бібліотекою класів.


Це неповне рішення. імена в налаштуваннях залежать від регістру, і ви забули U.
Чак Ді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.