Modifiche in .NET Framework 3.5 SP1
Questo documento descrive le modifiche alla progettazione che potrebbero essere necessarie nell'applicazione o nell'ambiente quando si esegue l'aggiornamento da .NET Framework versione 3.5 a .NET Framework versione 3.5 Service Pack 1 (SP1).
Le modifiche si verificano per diversi motivi, tra cui correzioni per problemi di prodotto, conformità agli standard, feedback dei clienti e sicurezza. In questo argomento vengono descritte solo le modifiche rilevanti. Per informazioni sulle nuove funzionalità, vedere Novità di .NET Framework . Per fornire commenti e suggerimenti, visitare MSDN Product Feedback Center.
Le sezioni seguenti descrivono le modifiche apportate in .NET Framework versione 3.5 SP1.
Common Language Runtime
miglioramenti delle prestazioni Le applicazioni ora usano La prevenzione dell'esecuzione dei dati per impedire tentativi di inserimento ed esecuzione di codice da percorsi di memoria non eseguibili. La sicurezza per l'esecuzione di codice gestito (inclusi assembly MSIL, immagini NGen e codice non gestito) è supportata dalla randomizzazione asLR (Address Space Layout Randomization). Gli assembly con nome sicuro e firmato non devono più avere le firme controllate in fase di caricamento, purché siano completamente attendibili e vengano caricati in domini applicazioni completamente attendibili. Questa modifica elimina i controlli ridondanti e migliora le prestazioni di avvio delle applicazioni con assembly firmati, ma non installate nella Global Assembly Cache (GAC). Le applicazioni avviate da condivisioni di rete hanno lo stesso comportamento degli eseguibili non gestiti e operano con attendibilità totale anziché parzialmente attendibile. L'attributo StringFreezingAttribute L'inliner del compilatore JIT è stato notevolmente migliorato per generare codice di qualità migliore. Tuttavia, la modifica dell'inliner ha un impatto sulle applicazioni con classi di cui è stata creata un'istanza con costruttori che usano il valore di enumerazione TypeAttributes.BeforeFieldInit. L'inizializzazione statica di questi tipi viene garantita alla volta prima dell'accesso a uno qualsiasi dei campi statici, ma non prima che venga richiamato un metodo statico o un costruttore di istanza. L'ora esatta in cui viene richiamato il costruttore della classe può essere diversa in .NET Framework versione 3.5 e 3.5 SP1. Altre modifiche del compilatore JIT includono modifiche agli errori di arrotondamento a virgola mobile e modifiche nella tempistica dei finalizzatori. Non sono necessarie modifiche. |
ADO.NET
metodi CanConvertToString nelle classi Value Serializer I metodi CanConvertToString I metodi System.Data.SqlClient.SQLDataReader.GetStr ing e oth Get generano un InvalidCastException se non è possibile eseguire il cast dei dati nel tipo richiesto. I messaggi includono ora i tipi, ad esempio: "Impossibile eseguire il cast dell'oggetto di tipo 'System.Decimal' per digitare 'System.String'". Non sono necessarie modifiche. |
SQLDataReader.GetString nelle colonne UDT La chiamata al metodo SQLDataReader.GetString nelle colonne UDT (User Defined Type) genera ora un InvalidCastException anziché il messaggio di errore "Cast non è supportato da Byte[] a String". Non sono necessarie modifiche. |
C#
query su raccolte non generiche ora usano la semantica di cast C# standard. Nelle espressioni di query LINQ su raccolte non generiche, ad esempio System.Collections.ArrayList , la clausola from della query viene riscritta dal compilatore per includere una chiamata all'operatore di> Cast<T. Cast<T> converte tutti i tipi di elemento nel tipo specificato nella clausola from nella query. Inoltre, nella versione originale di Visual C# 2008, l'operatore Cast<T> esegue anche alcune conversioni di tipi di valore e conversioni definite dall'utente. Tuttavia, queste conversioni vengono eseguite usando la classe System.Convert anziché la semantica C# standard. Queste conversioni causano anche problemi di prestazioni significativi in determinati scenari. In Visual C# 2008 SP1 l'operatore Cast<T> viene modificato per generare un'eccezione InvalidCastException per il tipo di valore numerico e le conversioni definite dall'utente. Questa modifica elimina sia la semantica cast C# non standard che il problema di prestazioni. Questa modifica è illustrata nell'esempio seguente.
Modifiche suggerite: se si dispone di codice che esegue query LINQ su raccolte non generiche e tale codice genera ora un'eccezione, modificare il tipo dell'espressione di query in modo che corrisponda al tipo di elementi nella raccolta su cui si sta eseguendo una query. Se è necessario eseguire una conversione di tipo valore o definita dall'utente sugli elementi, è possibile eseguire questa operazione durante l'esecuzione della query, come illustrato nell'esempio seguente:
|
ASP.NET, IIS
modalità integrata IIS Nella modalità di integrazione per Internet Information Services (IIS) 7.0, il metodo HttpServerUtility.TransferRequest utilizza erroneamente il metodo HTTPResponse.End per arrestare la richiesta padre. Ciò comporta la creazione di un ThreadAbortException , che può influire sulle prestazioni per terminare l'esecuzione di una risposta. In .NET Framework 3.5 SP1 il metodo TransferRequest Modifiche suggerite: se si dispone di codice di gestione degli errori che usa il metodo TransferRequest |
'autenticazione integrata di Windows Una modifica della sicurezza influisce sul modo in cui l'autenticazione integrata di Windows viene gestita dal System.Net.HttpWebRequest , System.Net.HttpListener , System.Net.Security.NegotiateStream e classi correlate nello spazio dei nomi System.Net. Questa modifica può influire su server Web e applicazioni client configurate per l'uso dell'autenticazione integrata di Windows. Il processo di autenticazione di Microsoft Windows NT LAN Manager (NTLM) utilizzato con l'autenticazione integrata di Windows include una richiesta rilasciata dal computer di destinazione che viene inviato di nuovo al computer client. Quando un computer riceve una richiesta di verifica generata, l'autenticazione avrà esito negativo a meno che la connessione non sia una connessione loopback (ad esempio, indirizzo IPv4 127.0.0.1). Per impostazione predefinita, la classe HttpWebRequest specifica il nome host usato nell'URL della richiesta nel nome dell'entità servizio (SPN) usato nel processo di autenticazione NTLM. Modifiche suggerite: è possibile fornire un nome SPN personalizzato da usare durante l'autenticazione a un dizionario di stringhe indicizzate dall'URI. Questo dizionario viene ottenuto con la proprietà
|
CDOSYS Le classi nello spazio dei nomi System.Web.Mail si basano su oggetti dati di collaborazione per i componenti di Windows 2000, che non saranno disponibili nella versione successiva di Windows (Windows 7). Di conseguenza, l'uso di queste classi in Windows 7 genererà una PlatformNotSupportedException . Modifiche suggerite: System.Web.Mail è stata deprecata in .NET Framework versione 2.0. Usare invece il supporto della posta elettronica nello spazio dei nomi System.Net.Mail |
ASP.NET convalida delle richieste ASP.NET convalida delle richieste include ora il controllo della parentesi angolare sinistra e della sequenza di caratteri del punto interrogativo: Modifiche su ggested: l'impatto di questa modifica deve essere minimo perché in genere non esiste alcun motivo per includere un commento XML nella stringa di query della variabile cookie. |
convalida URL ASP.NET convalida ora parti dell'URL quando si accede da una pagina di ASP.NET. Tuttavia, quando si usa la riscrittura url, è possibile accedere alla versione precedente dell'URL nella pagina con la proprietà Request.RawUrl. Modifiche suggerite: disabilitare la convalida in una pagina, se necessario. |
stato sessione È previsto che i provider di stato sessione implementino tutti i membri definiti nella classe System.Web.SessionState.SessionStateStoreProviderBase, incluso il metodo CreateUninitializedItem. Tuttavia, questo metodo è stato chiamato solo quando lo stato di una sessione senza cookie era in uso dal sito. Gli sviluppatori che non hanno usato uno stato di sessione senza cookie non devono implementare CreateUninitializedItem in un provider personalizzato. Con il rilascio di .NET Framework 3.5 SP1, il metodo CreateUninitializedItem può ora essere chiamato anche in determinate circostanze quando viene usato uno stato di sessione cookied. Modifiche suggerite: implementare CreateUninitializedItem nei provider personalizzati. Determinare se esiste già un elemento "live" per l'ID sessione specificato. Se un elemento non esiste, i provider devono creare un elemento per l'ID sessione. |
codifica URL ASP.NET ora espande la codifica URL delle intestazioni HTTP in uscita per includere il carattere di eliminazione (7F) e tutti i caratteri di controllo ASCII (ad eccezione della scheda orizzontale). Modifiche suggerite: se necessario, è possibile disattivare il comportamento di codifica dell'intestazione predefinito come indicato di seguito:
|
DefaultHTTPHandler in IIS Anche se la classe System.Web.DefaultHTTPHandler Modifiche suggerite: modificare la configurazione dell'applicazione in modo che funzioni correttamente in modalità integrata. |
La formattazione dei numeri client e del server Il comportamento di formattazione della funzione Number.localeFormat (eseguito sul client) è ora conforme al metodo String.Format (eseguito nel server). Ad esempio, il codice seguente restituisce
Prima di .NET Framework 3.5 SP1, il codice seguente restituirà
A questo localeFormat restituisce Non sono necessarie modifiche. |
ASP.NET campi nascosti I campi ASP.NET nascosti, ad esempio VIEWSTATE, vengono ora visualizzati nella parte superiore del Modifiche suggerite: È necessario disattivare questo comportamento impostando il nuovo attributo renderAllHiddenFieldsAtTopOfForm su false: Il valore predefinito è true. |
Windows Presentation Foundation (WPF)
classi BitmapEffect sono obsolete Classe System.Windows.Media.Effects.BitmapEffect, e le relative classi derivate (BevelBitmapEffect, BitmapEffectGroup, BlurBitmapEffect, DropShadowBitmapEffect, EmbossBitmapEffecte OuterGlowBitmapEffect), sono ora obsolete. Modifiche suggerite: interrompere l'uso delle classi legacy BitmapEffect e derivate e usare invece le nuove classi derivate da Effect:BlurEffect, DropShadowEffecte ShaderEffect. È anche possibile creare effetti personalizzati derivando da ShaderEffect. |
modifica del nome dell'assembly L'assembly che contiene il livello di rendering principale di WPF è stato rinominato da milcore.dll a wpfgfx_v0300.dll. Questo assembly non ha mai avuto API pubbliche. Non sono necessarie modifiche. |
comportamento collegamento ipertestuale Se il valore della proprietà Hyperlink.NavigateUri cambia tra l'ora in cui l'utente passa il cursore del mouse su un collegamento ipertestuale e l'ora in cui l'utente fa clic su tale collegamento ipertestuale, la navigazione verrà eseguita utilizzando l'URI ottenuto quando il cursore si posiziona sul collegamento ipertestuale. Non sono necessarie modifiche. |
Internet Explorer in modalità protetta in Windows Vista Quando Internet Explorer è in modalità protetta in Windows Vista, le finestre di dialogo modali dell'avviso di DHTML () e i controlli ActiveX ospitati in HTML vengono bloccati anziché visualizzati. Inoltre, quando l'WebBrowser controllo o controllo Frame che ospita il codice HTML si trova in un'applicazione XMAL Browser (XBAP) e xBAP viene caricato tra domini in una pagina HTML, viene generata un'eccezione. Non sono necessarie modifiche. |
metodi CanConvertToString nelle classi Serializer Value I metodi Non sono necessarie modifiche. |
Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF)
schema corrispondente Lo schema di corrispondenza usato dalla UriTemplate Non sono necessarie modifiche. |
miglioramenti della sicurezza di per l'autenticazione Quando un servizio viene eseguito con un account utente con sicurezza in modalità mista, un EndPointIdentity deve avere un'identità UPN (User Principal Name). Questa operazione non è necessaria con le versioni precedenti di WCF. Modifiche suggerite: quando un client è impostato per l'uso dell'impostazione SecurityMode.TransportWithMessageCredential (tramite autenticazione di Windows, autenticazione UPN o autenticazione identificazione personale), creare un'istanza della classe EndPointAddress con un'identità UPN e fornire codice personalizzato per gestire qualsiasi verifica dell'identificazione personale. |
Supporto dell'attendibilità parziale per la registrazione degli eventi L'attendibilità parziale supporta ora la registrazione degli eventi limitata. Solo gli errori di attivazione del servizio, gli errori di traccia e gli errori di registrazione vengono registrati nel registro eventi. Per evitare di scrivere messaggi eccessivi nel registro eventi, il numero massimo di eventi che è possibile registrare da un processo è 5. Non sono necessarie modifiche. |
disponibilità RemoteEndpointMessageProperty L'accesso a un'istanza del classe RemoteEndpointMessageProperty quando si usa HTTP ospitato in IIS dipende dalla presenza di una richiesta attualmente attiva. Pertanto, non può essere ottenuto dopo il completamento della richiesta, ad esempio quando si esegue una ricezione unidirezionale. Non sono necessarie modifiche. |
Nota: Per risolvere i problemi di interruzione tardiva critici per alcune applicazioni, Microsoft prevede di fornire un aggiornamento a NET Framework 3.5 SP1 che può essere incluso in un importante Windows Update. Altre informazioni su questo aggiornamento saranno disponibili nella pagina di download .NET Framework 3.5 SP1 nell'Area download Microsoft.