Прямая совместимость.NET Frameworks от 3,5 до 2,0
Я ищу надежный совет по прямой совместимости между конкретными версиями.NET Framework.
Для ясности предположим, что мы говорим о SQL Server 2008, который поддерживает только.NET 2.0 и в который мы загружаем сборку v3.5 с хранимой процедурой, а также все ее зависимости v3.5.
С одной стороны, мы знаем, что платформы.NET в основном обратно совместимы.
Мы также знаем, что прямая совместимость поддерживается только для платформы 1.1, и не более того.Однако версия CLR для фреймворков 2.0, 3.0 и 3.5 одинакова: CLR 2.0.
Как эти факты сочетаются?
Является ли "CLR is same" фактом для победы? Можно ли сказать, что, поскольку версия CLR одинакова между тремя версиями FW, код v3.5 можно безопасно вводить в среду v2.0 при условии, что все его зависимости также введены? В каком случае мы можем отклонить уведомление "прямая совместимость не поддерживается" как истинное в общем случае, но не истинное в частном случае отношений v3.5-v2.0?
(На самом деле мы попытались импортировать сборку v3.5 со всеми зависимостями в SQL Server 2008. Она работает. Но я хочу знать, работает ли она потому, что должна, или из-за хрупкой магии.)
3 ответа
Не существует такой вещи, как "сборка.NET 3.5". Единственная версия, напечатанная на сборке, является требуемой версией. Это v2.0.50727 для любой сборки, созданной компилятором, включенным в.NET версии 2.0 до 3.5 SP1. При дальнейшем повороте это действительно определяет формат метаданных в сборке. Только CLR версии 2 или выше может прочитать манифест в сборке. Этот формат изменился в 4.0, основная причина, по которой вам нужна CLR версии 4 для выполнения сборки, предназначенной для 4.
Единственное различие между версиями фреймворка 2.0 - 3.5 с пакетом обновления 1 (SP1) заключается в наборе сборок, которые включены. Например, вы можете добавить ссылку на сборку, например, на сборку WPF PresentationFramework, если вы нацелены на 3.0 или выше. Вы можете добавить System.Core только тогда, когда вы настроены на 3.5.
Избежать этих новых сборок в проекте SQL несложно. Вы получите быстрое исключение, если ошибетесь.
Я думаю, что ваше первое предположение о том, что "SQL Server 2008 поддерживает только.NET 2" неверно, поэтому все последующие обсуждения будут бессмысленными.
Если вы посмотрите на эту статью, то увидите, что поддерживается.NET 3.5, поскольку System.Core - только.NET 3.5,
http://msdn.microsoft.com/en-us/library/ms403279(v=sql.100).aspx
Теперь вы можете уверенно использовать вашу сборку.NET 3.5.
SQL Server загружает 2.0 CLR, который совместим с 3.x. Так что, да, "версия CLR такая же" выигрывает.