Запуск приложения .NET 4.0 со ссылкой на библиотеку 2.0 на компьютере с платформой 4.0 - PullRequest
11 голосов
/ 14 января 2012

Было бы очень сложно попытаться воспроизвести копию, поэтому я надеюсь, что кто-то найдет быстрый ответ ...

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

Если на сервере, на котором запущено это приложение, установлена ​​только .NET 4.0, а не 2.0 (или 3.0 / 3.5 и т. Д.), Что мне нужно?сделать, чтобы библиотека .NET 2.0 работала правильно?

Из того, что я прочитал, похоже, что я могу установить параметр конфигурации для supportedRuntime, но я не совсемпонимание того, что именно это делает.

Будет ли работать параметр конфигурации или в этой среде будут работать только библиотеки .NET 4.0?

(Это гипотетическая среда - я никогда не планирую никогдаЯ имею свои собственные серверы с 4.0, а не с 2.0, но если кто-то достаточно сумасшедший, чтобы сделать это, я хочу иметь возможность их поддерживать).

Спасибо

Ответы [ 4 ]

7 голосов
/ 14 января 2012

CLR может загружать более старые сборки в .net 4.0 framework.

Вот хорошее прочтение:

http://msdn.microsoft.com/en-us/magazine/ee819091.aspx

РЕДАКТИРОВАТЬ: обновленная цитата из статьи.Особо обратите внимание на жирный шрифт

.NET Framework 4 - и все будущие среды выполнения - смогут работать друг с другом в процессе работы.Несмотря на то, что мы не перенесли эту функциональность в более ранние версии (от 1.0 до 3.5), мы убедились, что 4 и более поздние версии смогут работать в режиме работы с любым более старым временем выполнения. Другими словами, вы сможете загрузить 4, 5 и 2.0 в одном и том же процессе, но вы не сможете загрузить 1.1 и 2.0 в одном и том же процессе. .NET Frameworks 2.0 через 3.5 все работаютв среде выполнения 2.0 и поэтому не имеют конфликтов друг с другом, как показано на рисунке 2.

6 голосов
/ 14 января 2012

С http://neilblackburn.blogspot.com/2009/10/net-framework-40-backward-compatibility.html (и, транзитивно, http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2009/08/03/installing-net-framework-v4-0-and-running-net-2-0-3-0-3-5-3-5sp1-applications.aspx):

Теперь я знал, что вы не можете просто взять приложение 3.5 с пакетом обновления 1 и запустить его на V4.0 CLR. Требуется CLR V2.0 или перенастройка с тег <supportedRuntimes/> для того, чтобы согнуть приложение для запуска V4.0 CLR и этот изгиб может быть то, что вы не хотите делать.

2 голосов
/ 14 января 2012

По ссылке в ответе Брианмака ( В процессе параллельно ):

Это означает, что если приложение перекомпилируется для запуска в среде выполнения .NET Framework 4 и все еще имеет зависимые сборки, построенные для .NET 2.0, эти иждивенцы также будут загружаться в среде выполнения .NET 4.

Это может означать, однако, что могут быть ошибки из-за запуска в другое время выполнения.

1 голос
/ 14 января 2012

Если у вас есть источник SharpZipLib, вы можете просто перестроить его как .NET 4.0

...