Нарушение изменений в .NET 4.0

Существует много информации о новых функциях и классах в новом 4.0, однако есть также изменения, которые могут повлиять на существующие приложения, например

  • Timespan теперь реализует IFormattable и старую строку. Format() с недопустимыми параметрами генерирует исключение вместо вызова простой ToString(). Тем не менее команда CLR обеспечивает приятную возможность включить поведение из предыдущей версии с настройкой конфигурации - TimeSpan_LegacyFormatMode.

    CLR Inside Out

  • Доступ к событиям внутри класса, где они объявлены с помощью + = или - =, приведет к вызову add/remove сгенерированных аксессуаров, которые возвращают void. Некоторый код даже не компилируется в версии 4.0.

    Блог Криса Берроуза

  • CAS устарел и для его использования по-прежнему необходимо использовать специальные настройки в конфигурации - NetFx40_LegacySecurityPolicy

Так что я задаюсь вопросом, что такое другие изменения, и можно ли найти хотя бы предварительный список изменений, которые могут или могут нарушить существующие функции с выпуском .NET 4.0?

Ответ 1

Команда документации по языкам публикует отдельные документы для изменений С# и VB:

VB: http://msdn.microsoft.com/en-us/library/cc714070%28VS.100%29.aspx

С#: http://msdn.microsoft.com/en-us/library/ee855831%28VS.100%29.aspx

Я написал С# один и включил изменения ковариации и контравариантности, упомянутые Эриком Липпертом, и изменения событий, обсуждаемые Крисом Берроузом. Также существуют некоторые нарушения в отношении необязательных параметров, встроенных типов взаимодействия и вывода типа группы методов.

Update:

Еще один полезный документ (из команды документации .NET): http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx

Ответ 2

Ковариантные и контравариантные преобразования вводят некоторые неясные, но возможные нарушения при перекомпиляции:

http://blogs.msdn.com/ericlippert/archive/2007/11/02/covariance-and-contravariance-in-c-part-nine-breaking-changes.aspx

Команда обучения пользователей С# собирает список известных потенциальных изменений в новой версии компилятора, более подробно см. ответ выше.

Ответ 3

Также обратите внимание, что SmtpClient теперь реализует IDisposable, поэтому теперь вы должны использовать что-то вроде этого:

using (var smtpclient = new SmtpClient())
{
  smtpclient.Send(message);
} 

В соответствии с этой страница в рамках .NET 4.0 может быть больше этих "скрытых пробок". И автор предлагает найти их, используя FxCop для вашего кода.

Ответ 5

Я только что исправил ошибку в производственном приложении, которое недавно перешло в .NET 4.0.

Связывание данных, использующее вложенные свойства, было выбрано:

ArgumentException: Cannot bind to the property or column 'SomeProperty' on the DataSource.

Как представляется, известная проблема с обходным решением. Я не мог найти его в каких-либо официальных списках, и ошибка в Microsoft Connect была закрыта как "Не воспроизводимая".

Вложенные свойства определены в строках, поэтому мне пришлось искать их все вручную.