2010-03-30 7 views
58

Hay una gran cantidad de información sobre las nuevas funciones y clases en el nuevo 4.0 Sin embargo también hay cambios que pueden afectar a las aplicaciones existentes, por ejemplocambios de ruptura en .NET 4.0

  1. Timespan ahora implementa IFormattable y viejos string.Format() con opciones no válidas generará una excepción en lugar de llamar a ToString simple(). Sin embargo, el equipo de CLR ofrece una buena función para habilitar el comportamiento de la versión anterior con configuración: TimeSpan_LegacyFormatMode.

    CLR Inside Out

  2. acceso a los eventos dentro de la clase en la que se declaran usando + = o - = conducirá a llamar a añadir/eliminar descriptores de acceso generados que devuelven vacío. Algún código ni siquiera se compilará en 4.0.

    Chris Burrows Blog

  3. CAS es obsoleto y que permita que todavía se tienen que utilizar la configuración especial en la configuración - NetFx40_LegacySecurityPolicy

Así que se preguntan qué otros cambios y es posible encontrar al menos lista preliminar de cambios que romperán o pueden romper la funcionalidad existente con el lanzamiento de .NET 4.0?

+0

Esta sería una gran wiki ... pero mientras tanto ... +1 ¡porque solo tienes 78 puntos de repetición! – Armstrongest

+0

Sí, cambie esto a una wiki de la comunidad, ¡una gran entrada para eso! –

+0

Se ha enviado un error a Microsoft Connect sobre [resolución de método virtual no intuitiva con parámetros opcionales] (https://connect.microsoft.com/VisualStudio/feedback/details/555961/unintuitive-virtual-method-resolution-with-optional-parameters) –

Respuesta

31

El equipo de documentación de lenguas publica documentos separados para C# y VB rompiendo cambios:

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

escribí el C# un e incluyó cambios de covarianza y contravarianza romper mencionados por Eric Lippert y los cambios de eventos discutidos por Chris Burrows. También hay algunos cambios importantes en torno a los parámetros opcionales, los tipos de interoperación incrustados y la inferencia del tipo de grupo de métodos.

Actualización:

un documento más útil (de .NET equipo de documentación): http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx

15

covariante y conversiones contravariant introducen algunos cambios de ruptura oscuros, pero posible después de recompilación:

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

El C# equipo de educación del usuario compila una lista de los conocidos cambios de ruptura potenciales en la nueva versión del compilador, ver la respuesta anterior para más detalles.

+3

Eric Lippert es un hombre muy inteligente/humorístico. –

5

También tenga en cuenta que SmtpClient ahora implementa IDisposable por lo que ahora debe usar algo como esto:

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

De acuerdo con este page puede haber más de estos 'atascos ocultos' dentro del marco .NET 4.0. Y el autor sugiere encontrarlos mediante el uso de FxCop en su código.

0

Acabo de corregir un error en una aplicación de producción que recientemente se movió a .NET 4.0.

El enlace de datos que utiliza las propiedades anidadas estaba lanzando:

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

Parece ser un known issue con una solución. No pude encontrarlo en ninguna lista oficial y el error en Microsoft Connect se ha cerrado como "No reproducible".

Las propiedades anidadas están todas definidas en cadenas, así que tuve que buscarlas todas manualmente.