打破.NET 4.0中的变化

And*_*nov 58 c# .net-4.0

有关新4.0中的新功能和类的信息很多,但是也存在可能影响现有应用程序的更改

  1. Timespan现在实现了IFormattable,而带有无效选项的旧string.Format()将抛出异常,而不是调用简单的ToString().但是,CLR团队提供了一个很好的功能,可以通过配置设置启用以前版本的行为 - TimeSpan_LegacyFormatMode.

    CLR Inside Out

  2. 访问使用+ =或 - =声明它们的类中的事件将导致调用添加/删除生成的返回void的访问器.有些代码甚至不会在4.0中编译.

    克里斯伯罗斯博客

  3. CAS已弃用,要启用它,仍需要在配置中使用特殊设置 - NetFx40_LegacySecurityPolicy

所以我想知道其他更改是什么,是否有可能找到至少初步的更改列表,这些更改将会或可能会破坏.NET 4.0发布的现有功能?

Ale*_*ina 31

语言文档团队为C#和VB发布单独的文档来破坏更改:

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

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

我编写了C#one,其中包括Eric Lippert提到的协方差和逆变突破变化,以及Chris Burrows讨论的事件变化.围绕可选参数,嵌入式互操作类型和方法组类型推断也存在一些重大变化.

更新:

一个更有用的文档(来自.NET文档团队):http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx


Eri*_*ert 15

协变和逆变转换在重新编译时引入了一些模糊但可能的重大变化:

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

C#用户教育团队在新版本的编译器中编译已知潜在重大更改的列表,有关详细信息,请参阅上面的答案.

  • Eric Lippert是一个非常聪明/幽默的人. (3认同)

Bas*_*sen 5

另请注意,SmtpClient现在实现了IDisposable,因此您现在应该使用以下内容:

using (var smtpclient = new SmtpClient())
{
  smtpclient.Send(message);
} 
Run Code Online (Sandbox Code Playgroud)

根据这个页面,.NET 4.0框架中可能会有更多这些"隐藏的堵塞".作者建议在代码中使用FxCop找到它们.