Разрешить приложение С#, встроенное в .NET 2.0 для .NET 4.0/4.5 - программирование
Подтвердить что ты не робот

Разрешить приложение С#, встроенное в .NET 2.0 для .NET 4.0/4.5

У нас есть DLL С# (пусть его называют myapp.exe), встроенный в .NET 2.0 Framework (VS2005), и мы обнаружили, что наше приложение не будет работать на машинах, где установлен только .NET 4.0 или выше. Чтобы наше приложение работало над .NET 4.0, я добавил следующие строки в myapp.exe.config, следуя этой статье Установка .NET Framework V4.0 и запуск .NET Приложения 2.0/3.0/3.5/3.5Sp1

<startup>
  <supportedRuntime version="v4.0.30319"/>    
</startup>

И он работает.

Затем я увидел, что в этой статье также упоминается следующее (особенно второй абзац):

Теперь я знал, что вы не можете использовать приложение Service Pack 1 3.5 и запустить его на V4.0 CLR. Он нуждается в V2.0 CLR или переконфигурировании с помощью чтобы сгибать приложение для работы в среде V4.0 CLR, и что изгиб может быть тем, что вы не хотите делать.

Что я не понял, было то, что установка .NET 4.0 не смогла бы установить бит, который необходим для приложения 2.0/3.0/3.5/3.5Sp1. Он будет устанавливать только V4.0 CLR и сборки V4.0, а не дополнительно устанавливать эквивалент .NET Framework V3.5 Sp1. Итак, вам необходимо установить (например,.NET Framework V3.5 Sp1 самостоятельно вместе с .NET 4.0

Из моего тестирования это означало бы, что я мог бы запустить приложение 2.0 С# на .NET 4.0 с платформой .NET 4.0 (сборка 4.0/сборник), что противоречит тому, что говорится в статьях.

Или я что-то пропустил? Было бы полезно, если бы кто-то мог прояснить это. Microsoft на самом деле не делает этого ясно.

4b9b3361

Ответ 1

Из моего тестирования это означало бы, что я мог бы запустить свое приложение 2.0 С# на .NET 4.0 с платформой .NET 4.0 (сборка 4.0/сборник), что противоречит тем, что были упомянуты в статьях.

Вы можете запустить свое приложение на .NET 4 с помощью сборок .NET 4. Однако всегда существует вероятность незначительного изменения поведения во время выполнения, поскольку вы не будете использовать ту же среду исполнения и фреймворк, которые вы использовали для разработки. Я подозреваю, что статья пытается предположить, что вы не получите то же самое поведение, просто установив 4.0, хотя, как вы видели, он должен работать.

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

Ответ 2

И я цитирую:

".NET Framework 4 обратно совместим с приложениями, которые были созданы с .NET Framework версий 1.1, 2.0, 3.0 и 3.5. Другими словами, приложения и компоненты, созданные с использованием предыдущих версий .NET Framework, будут работать над .NET Framework 4."

Взято из Совместимость версий в .NET Framework

У вас есть правильная идея с файлом App.config, но вы действительно ограничиваете себя одной строкой.
Могу ли я предложить более либеральное использование поддерживаемых строк Runtime?

Например:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <!-- 
    <supportedRuntime version="v3.5"/>  "The .NET Framework version 3.0 and 3.5 use version 2.0.50727 of the CLR."  
    -->
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3" /> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

Почему supportedRuntime version="v3.5" закомментирован? Помните, что эта конфигурация определяет, какие версии Common Language Runtime (CLR) совместимы с вашим приложением. Нет версии 3.0 или 3.5 для CLR. См. . Версии и зависимости .NET Framework

Ответ 3

Просто, чтобы быть немного более кратким. В App.config вы показываете поддержку CLR. Из .Net v2 и только 2 версия CLR. Таким образом, вы получите поддержку .Net v2 и дальше. Обязательно включите файл exe.config, который построен в вашем проекте, иначе вы, вероятно, все равно увидите всплывающее окно с просьбой установить .NET.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Для поддержки .Net v2-v3.5 используйте:

<supportedRuntime version="v2.0.50727"/>

Для поддержки .Net v4.0-4.6 используйте:

<supportedRuntime version="v4.0"/>

Более подробную информацию можно найти в Настроить приложение для поддержки .NET Framework

Ответ 4

Просто установка web.config для поддерживаемой версии Runtime = "v4.0.30319" /не будет достаточной.

Вам нужно фактически открыть проект в Visual Studio, изменить его целевую структуру (properties → build) на 4.0 - и THEN повторить построенное решение для ваших 4.0 клиентов. Несколько системных сборок различаются между 2.0 и 4.0 (system.web и т.д.) - хотя, как было предложено в предыдущем ответе, была предоставлена ​​обратная совместимость.

Единственный способ последовательно предоставить своим клиентам действительную версию, совместимую с "4.0", заключается в ее компиляции против среды выполнения 4.0. Это приведет к обновлению любых сторонних библиотек с открытым исходным кодом до версий 4.0.