.net 4 обратная совместимость

Требуется ли для запуска приложения 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 ответа

Решение

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

Что я знаю, так это то, что если ваш исполняемый файл представляет собой сборку.net 4.0, вам, возможно, придется изменить свой app.config, чтобы он загружал сборки.net 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)

-редактировать-

Согласно этой теме, .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>

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

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

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

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

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
Другие вопросы по тегам