Подтвердить что ты не робот

При связывании управляемой сборки .NET 2.0 из приложения .NET 4.0, какая структура используется?

Если у меня есть сборка CLR 2.0 (чистый управляемый код, без проблем с смешанным режимом), с которым мне нужно связать приложение 4.0 CLR, выполняется ли код 2.0 в версии 2.0 CLR или 4.0.

В принципе, существует ли риск взлома 4.0, влияющий на код 2.0?

4b9b3361

Ответ 1

Ответ выше неверен. Вы получаете бок о бок с полными рамками. A.Net 2 APPLICATION (обратите внимание, что означает EXE, а не библиотеку) не будет автоматически продвигаться в .Net 4.

Но если приложение .Net 4 загружает сборку .Net 2, оно загружается в ту же среду выполнения (иначе как они могут обмениваться информацией). Сборка .Net 2 загружается в среду выполнения .net 4, используя режим совместимости, который должен минимизировать поломки в изменениях (в основном для изменений безопасности в .Net 4).

А сборка .Net 2 не может ссылаться на сборку .Net 4, потому что у нее не будет функций.

Единственное исключение из этого, о котором я знаю, - это если вы загружаете сборку .Net из приложения С++. Приложение С++ может загружать и размещать две очереди. Он может иметь сборку .Net 2 и сборку .Net 4, но они не смогут напрямую разговаривать друг с другом. Вот как работает CLR Procs в SQL Server. Вы можете иметь .Net 2 CLR Proc и .Net 4 CLR Proc, которые не обмениваются данными, но оба загружаются на сервер.

В MSDN Magazine появилась замечательная статья о размещении .NET Framework, но я не могу ее найти сейчас. Возможно, кто-то еще может опубликовать ссылку.

Таким образом, вы можете загружать практически любую сборку .Net 2 в исполняемый файл .Net 4 без особых проблем. Единственные проблемы, которые я видел, - с разрешениями безопасности.

Ответ 2

В принципе, существует ли риск взлома 4.0, влияющий на код 2.0?

Неа. Начиная с .NET 4, вам не нужно беспокоиться о проблемах совместимости вообще! В версии 4 появилась новая функция "Совместное выполнение внутри процесса" , которая по сути позволяет загружать несколько версий CLR в один и тот же процесс.

Другими словами, поскольку ваше основное приложение работает в среде выполнения 4.0, вы можете сказать ему загрузить среду выполнения 2.0 при загрузке сборки CLR 2.0. В сборке 2.0 CLR будет использоваться среда выполнения 2.0, в то время как ваше приложение будет продолжать использовать среду выполнения 4.0.

Как вы это указали? Я считаю, что вы можете просто добавить файл конфигурации для своей сборки CLR 2.0 (например, "My.dll.config" в том же каталоге, что и "My.dll" ), но я не пробовал это с помощью DLL. Тем не менее, вот что вы ввели в конфигурационный файл сборки:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>