Какая инфраструктура используется при связывании управляемой сборки .NET 2.0 из приложения .NET 4.0? - PullRequest
24 голосов
/ 16 июля 2010

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

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

Ответы [ 3 ]

18 голосов
/ 08 октября 2010

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

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

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

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

Недавно в журнале MSDN была замечательная статья о размещении .Net framework., но я не могу найти это сейчас.Возможно, кто-то другой может опубликовать ссылку.

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

6 голосов
/ 04 октября 2010

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

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

Другими словами, поскольку ваше основное приложение выполняется в среде выполнения 4.0, вы можете указать ему загружать среду выполнения 2.0 при загрузке сборки 2.0 CLR. Сборка 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>
1 голос
/ 05 октября 2010

, если ответ от htw не ответил вам, или он зависает на вас.Посмотрите на это

http://msmvps.com/blogs/rfennell/archive/2010/03/27/mixed-mode-assembly-is-built-against-version-v2-0-50727-error-using-net-4-development-web-server.aspx

...