C# 打破.NET 4.0中的变化

C# 打破.NET 4.0中的变化,c#,.net-4.0,C#,.net 4.0,关于新4.0中的新特性和新类有很多信息,但是也有可能影响现有应用程序的更改,例如 Timespan现在实现了IFormattable和old string。带有无效选项的Format()将引发异常,而不是调用simple ToString()。然而,CLR团队提供了一个很好的特性,可以通过配置设置-TimeSpan_LegacyFormatMode启用以前版本的行为 访问类内使用+=或-=声明的事件将导致调用add/remove生成的访问器,这些访问器返回void。有些代码甚至不能在4.0中编

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

  • Timespan现在实现了IFormattable和old string。带有无效选项的Format()将引发异常,而不是调用simple ToString()。然而,CLR团队提供了一个很好的特性,可以通过配置设置-TimeSpan_LegacyFormatMode启用以前版本的行为

  • 访问类内使用+=或-=声明的事件将导致调用add/remove生成的访问器,这些访问器返回void。有些代码甚至不能在4.0中编译

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


  • 因此,我想知道还有哪些变化,是否有可能找到至少初步的变化列表,这些变化将或可能会破坏.NET4.0发布后的现有功能

    只是为了添加到列表中,我还没有遇到RTM转换。

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


    C#用户培训团队汇编了新版本编译器中已知的潜在破坏性更改列表,请参见上面的答案了解详细信息。

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

    VB:

    C#:

    我写了C#one,包括Eric Lippert提到的协方差和逆方差打破变化,以及Chris Burrows讨论的事件变化。围绕可选参数、嵌入的互操作类型和方法组类型推断也有一些突破性的更改

    更新:


    另一个有用的文档(来自.NET文档团队):

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

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

    根据这一点,在.NET4.0框架内可能存在更多这些“隐藏的阻塞”。作者建议在代码中使用FxCop来查找它们

    我刚刚修复了一个最近迁移到.NET 4.0的生产应用程序中的一个bug

    正在引发使用嵌套属性的数据绑定:

    ArgumentException:无法绑定到数据源上的属性或列“SomeProperty”。

    这似乎是一个解决方案。我在任何官方列表中都找不到它,微软Connect上的漏洞已经被关闭为“不可复制”


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

    这将是一个很棒的wiki。。。但与此同时+1因为你只有78个代表点!是的,请切换到一个社区维基-伟大的入口!已向Microsoft Connect提交关于的错误