Запуск приложения .NET 4.0 со ссылкой на библиотеку 2.0 на компьютере с ракурсом 4.0

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

Предположим, что у меня есть приложение .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, но если кто-то настолько сумасшедший, чтобы сделать это, я хочу иметь возможность их поддерживать).

Спасибо

Ответ 1

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

Здесь хорошо читается:

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

EDIT: обновленная цитата из статьи. Особо обратите внимание на жирный шрифт

Время выполнения .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.

Ответ 2

Из 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):

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

Ответ 3

Из ссылки в ответе bryanmac ( "Внутри-бок о бок" :

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

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

Ответ 4

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