打破.NET 4.0中的变化

时间:2010-03-30 19:37:46

标签: c# .net-4.0

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

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

    CLR Inside Out

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

    Chris Burrows Blog

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

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:15)

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

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

C#用户教育团队在新版本的编译器中编译已知潜在重大变化的列表,详见上面的答案。

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:2)

只是要添加到列表here's the ASP.Net official list for the RC,我还没有遇到过RTM。

答案 4 :(得分:0)

我刚刚修复了最近转移到.NET 4.0的生产应用程序中的错误。

使用嵌套属性的数据绑定抛出:

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

它似乎是一个known issue,有一个解决方法。我无法在任何官方列表中找到它,并且Microsoft Connect上的错误已被关闭为“不可重现”。

嵌套属性都是在字符串中定义的,所以我必须手动搜索它们。