.net 4 обратная совместимость - PullRequest
2 голосов
/ 18 мая 2011

Требуется ли для запуска приложения для Windows, разработанной в .net 4, которая ссылается на сборку, разработанную в .net 3.5, и .net 4, и .net 3.5?

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

[ПРАВИТЬ] Я просвещен :) Итак, вот мой реальный вопрос , который осталсябез ответа некоторое время здесь, на SO.Будем рады, если вы, ребята, сможете разобраться в проблеме!

В app.config приложения уже есть следующие строки.

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

Ответы [ 3 ]

7 голосов
/ 18 мая 2011

Я не уверен, что вам нужно установить 3.5. CLR .net 4.0 может загружать сборки, написанные на .net 2.0 и выше, и кажется маловероятным, что они будут работать с разными версиями CLR, так как .net4и сборки 2.0 могут вызывать друг друга без взаимодействияв некоторых случаях.Это связано с тем, что модель безопасности изменилась с CAS в .net 2.0 на упрощенную систему в 4.0

. Мне кажется, это еще одно указание на то, что .net 2.0 clr фактически не используетсяпри загрузке сборки .net 2.0 в процесс .net 4.0.

(.NET 2.0 и 4.0 ссылаются на общеязыковую версию, все версии 2.0, 3.0 и 3.5 используют версию CLR 2.0)

-edit-

Согласно этой нити , .net 3.5 не требуется для загрузки сборки 3.5, если процесс 4.0.

-edit2-

Вот как вы должны изменить свой app.config, чтобы разрешить исполняемому файлу .net 4.0 загружать сборки 2.0 во всех сценариях (например, запуск сетевого диска)

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
2 голосов
/ 18 мая 2011

Нет, вам не нужно устанавливать .NET 3.5. Предполагая, что вы ничего особенного не делаете, все сборки будут загружены в одну и ту же CLR, и поэтому сборка .NET 3.5 будет в итоге использовать реализацию .NET 4 всех используемых им классов.

Как упоминалось в aL3891, система безопасности немного изменилась с течением времени, но если это "простая" библиотека классов, которая не использует CAS, все должно быть хорошо без какой-либо специальной работы. Конечно, было бы лучше проверить все это до того, как оно окажется на компьютере клиента:)

0 голосов
/ 18 мая 2011

Исправление: у меня была сборка, для которой требовалось установить .NET 4.0 и .NET 3.5;но, согласно исследованиям, это не типично и, как правило, не так.

В моем случае добавление следующих строк кода в мой app.config из ответа aL3891 выше исключило для меня зависимость от .NET 3.5.

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...