2010-03-30 18 views
58

C'è un sacco di informazioni sulle nuove funzionalità e le classi a nuovo 4.0 Tuttavia ci sono anche i cambiamenti che possono influire sulle applicazioni esistenti, ad esempioRompere cambiamenti in .NET 4.0

  1. Timespan ora implementa IFormattable e vecchi string.Format() con opzioni non valide genererà un'eccezione anziché chiamare semplicemente ToString(). Tuttavia, il team CLR fornisce una funzionalità utile per abilitare il comportamento della versione precedente con le impostazioni di configurazione - TimeSpan_LegacyFormatMode.

    CLR Inside Out

  2. L'accesso agli eventi all'interno della classe in cui sono dichiarate usando + = o - = porterà a chiamare aggiungere/rimuovere funzioni di accesso generati che restituiscono vuoto. Alcuni codici non verranno nemmeno compilati in 4.0.

    Chris Burrows Blog

  3. CAS è deprecato e per consentire uno ancora bisogno di utilizzare regolazione speciale nella configurazione - NetFx40_LegacySecurityPolicy

Allora mi chiedo quali sono le altre modifiche e è possibile trovare almeno elenco preliminare di modifiche che potrebbero o potrebbero interrompere la funzionalità esistente con il rilascio di .NET 4.0?

+0

Questo sarebbe un grande wiki ... ma nel frattempo ... +1 perché sei solo in 78 punti rep! – Armstrongest

+0

Sì, si prega di passare a un wiki della comunità - ottima voce per quello! –

+0

Esiste un bug inviato a Microsoft Connect su [risoluzione del metodo virtuale non intuitiva con parametri facoltativi] (https://connect.microsoft.com/VisualStudio/feedback/details/555961/unintuitive-virtual-method-resolution-with-optional-parameters) –

risposta

31

Il team lingue documentazione pubblica documenti separati per C# e VB cambiamenti rottura:

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

ho scritto il C# uno e incluso covarianza e controvarianza rottura cambiamenti menzionati da Eric Lippert e le modifiche agli eventi discusse da Chris Burrows. Ci sono anche alcune modifiche irrisolte attorno ai parametri opzionali, ai tipi di interoperabilità incorporati e all'inferenza del tipo di gruppo di metodi.

Aggiornamento:

più un documento utile (da NET team di documentazione): http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx

15

covariante e conversioni controvarianti introducono alcune modifiche rottura oscuri ma possibili su ricompilazione:

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

Il C# team educazione degli utenti compila un elenco dei potenziali noti cambiamenti di rottura nella nuova versione del compilatore, vedere la risposta sopra per i dettagli.

+3

Eric Lippert è un uomo molto intelligente/umoristico. –

5

Si noti inoltre che SmtpClient ora implementa IDisposable così si dovrebbe ora usare qualcosa di simile a questo:

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

In base a questo page potrebbero esserci più di questi "ingorghi nascosti" all'interno del framework .NET 4.0. E l'autore suggerisce di trovarli usando FxCop sul tuo codice.

0

Ho appena corretto un errore in un'app di produzione che è stata recentemente spostata su .NET 4.0.

associazione dei dati che utilizza le proprietà nidificate stava gettando:

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

sembra essere un known issue con una soluzione. Non sono riuscito a trovarlo su nessuna lista ufficiale e il bug su Microsoft Connect è stato chiuso come "Non riproducibile".

Le proprietà nidificate sono tutte definite in stringhe, quindi ho dovuto cercarle tutte manualmente.