При связывании управляемой сборки .NET 2.0 из приложения .NET 4.0, какая структура используется?
Если у меня есть сборка CLR 2.0 (чистый управляемый код, без проблем с смешанным режимом), с которым мне нужно связать приложение 4.0 CLR, выполняется ли код 2.0 в версии 2.0 CLR или 4.0.
В принципе, существует ли риск взлома 4.0, влияющий на код 2.0?
Ответы
Ответ 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>
Ответ 3
если ответ от 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