Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive i problemi di migrazione tra .NET Framework versione 3.5 Service Pack 1 e .NET Framework versione 4, incluse correzioni, modifiche per la conformità e la sicurezza degli standard e modifiche in base al feedback dei clienti. La maggior parte di queste modifiche non richiede alcuna modifica di programmazione nelle applicazioni. Per quelli che possono comportare modifiche, vedere la colonna Modifiche consigliate della tabella. Le modifiche rilevanti sono suddivise in base all'area, ad esempio ASP.NET e Windows Presentation Foundation (WPF).
Per una panoramica generale dei problemi in questo articolo, vedere Guida alla migrazione a .NET Framework 4.
Per informazioni sulle nuove funzionalità, vedere Novità di .NET Framework 4.
ASP.NET e Web
Spazi dei nomi: System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls
Assembly: System.Web (in System.Web.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
File di definizione del browser | I file di definizione del browser sono stati aggiornati per includere informazioni su browser e dispositivi nuovi e aggiornati. Sono stati rimossi browser e dispositivi meno recenti, ad esempio Netscape Navigator, e sono stati aggiunti browser e dispositivi più recenti, ad esempio Google Chrome e Apple iPhone. Se l'applicazione contiene definizioni di browser personalizzate che ereditano da una delle definizioni del browser rimosse, verrà visualizzato un errore. L'oggetto HttpBrowserCapabilities (esposto dalla proprietà Request.Browse della pagina) è guidato dai file di definizione del browser. Pertanto, le informazioni restituite accedendo a una proprietà di questo oggetto in ASP.NET 4 potrebbero essere diverse dalle informazioni restituite in una versione precedente di ASP.NET. |
Se l'applicazione si basa sui file di definizione del browser precedenti, è possibile copiarli dalla cartella seguente: Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browser Copiare i file nella cartella \CONFIG\Browser corrispondente per ASP.NET 4. Dopo aver copiato i file, eseguire lo strumento da riga di comandoAspnet_regbrowsers.exe . Per altre informazioni, vedere il https://www.asp.net/mobile sito Web. |
Applicazioni figlie in esecuzione in versioni miste di ASP.NET | Applicazioni ASP.NET 4 configurate come elementi figli di applicazioni che utilizzano versioni precedenti rispetto ad ASP.NET 4 potrebbero non essere avviate a causa di errori di configurazione o compilazione. L'errore specifico che si verifica dipende dal fatto che l'applicazione venga eseguita in IIS 6.0 o in IIS 7 o IIS 7.5. | È possibile apportare modifiche ai file di configurazione delle applicazioni interessate in modo che il sistema di configurazione riconosca correttamente l'applicazione ASP.NET 4. Per informazioni sulle modifiche da apportare, vedere la sezione "Le applicazioni figlio ASP.NET 4 non si avviano quando si trovano sotto applicazioni ASP.NET 2.0 o ASP.NET 3.5" nel documento ASP.NET 4 modifiche significative nel sito Web ASP.NET. |
Modifiche di ClientID | La nuova clientIDMode impostazione in ASP.NET 4 consente di specificare come ASP.NET genera l'attributo id per gli elementi HTML. Nelle versioni precedenti di ASP.NET, il comportamento predefinito equivale all'impostazione AutoID di clientIDMode . L'impostazione predefinita è ora Predictable . Per ulteriori informazioni, vedere Identificazione del controllo del server Web ASP.NET. |
Se si usa Visual Studio per aggiornare l'applicazione da ASP.NET 2.0 o ASP.NET 3.5, lo strumento aggiunge automaticamente un'impostazione al file Web.config che mantiene il comportamento delle versioni precedenti di .NET Framework. Tuttavia, se si aggiorna un'applicazione modificando il pool di applicazioni in IIS per .NET Framework 4, ASP.NET usa la nuova modalità per impostazione predefinita. Per disabilitare la nuova modalità ID client, aggiungere l'impostazione seguente al file Web.config:<pages clientIDMode="AutoID" /> |
Sicurezza dall'accesso al codice | Le funzionalità di ASP.NET 2.0 incluse in ASP.NET 3.5 utilizzano il modello di sicurezza per l'accesso al codice (.NET Framework 1.1 e .NET Framework 2.0 CAS). Tuttavia, l'implementazione del cas in ASP.NET 4 è stata sostanzialmente revisionata. Di conseguenza, le applicazioni con attendibilità parziale ASP.NET che si basano su codice attendibile in esecuzione nella Global Assembly Cache potrebbero non riuscire con diverse eccezioni di sicurezza. Le applicazioni con attendibilità parziale che si basano su estese modifiche ai criteri CAS del computer potrebbero anche non riuscire e generare eccezioni di sicurezza. | È possibile ripristinare le applicazioni ASP.NET 4 con trust parziale al comportamento di ASP.NET 1.1 e 2.0 usando il nuovo attributo legacyCasModel nell'elemento di configurazione trust , come illustrato nell'esempio seguente:<trust level= "Medium" legacyCasModel="true" /> Importante: il ripristino del modello CAS precedente potrebbe rappresentare una riduzione della sicurezza. Per altre informazioni sul nuovo modello di sicurezza dell'accesso di codice ASP.NET 4, vedere Sicurezza dall'accesso di codice in ASP.NET 4 applicazioni. |
File di configurazione | I file di configurazione radice (il file di machine.config e il file di Web.config radice) per .NET Framework e ASP.NET 4 sono stati aggiornati per includere la maggior parte delle informazioni di configurazione boilerplate trovate nei file di Web.config dell'applicazione in ASP.NET 3.5. A causa della complessità dei sistemi di configurazione di IIS 7 e IIS 7.5 gestiti, l'esecuzione di applicazioni ASP.NET 3.5 in ASP.NET 4 e in IIS 7 e IIS 7.5 può generare errori ASP.NET o errori IIS. | Aggiornare ASP.NET 3.5 applicazioni a ASP.NET 4 usando gli strumenti di aggiornamento del progetto in Visual Studio. Visual Studio 2010 modifica automaticamente il file di Web.config ASP.NET 3.5 dell'applicazione in modo da contenere le impostazioni appropriate per ASP.NET 4. Tuttavia, è possibile eseguire ASP.NET applicazioni 3.5 usando .NET Framework 4 senza ricompilazione. In tal caso, potrebbe essere necessario modificare manualmente il file di Web.config dell'applicazione prima di eseguire l'applicazione in .NET Framework 4 e in IIS 7 o IIS 7.5. La modifica specifica che è necessario apportare dipende dalla combinazione di software in uso, incluse le versioni di Service Pack (SP). Per informazioni sulle possibili combinazioni software interessate da questa modifica e su come risolvere i problemi relativi a combinazioni specifiche, vedere la sezione "Errori di configurazione correlati alla nuova configurazione ASP.NET 4 Configurazione radice" nel documento ASP.NET 4 Modifiche di rilievo nel sito Web ASP.NET. |
Rendering dei controlli | Nelle versioni precedenti di ASP.NET alcuni controlli hanno generato markup che non è stato possibile disabilitare. Per impostazione predefinita, questo tipo di markup non viene più generato in ASP.NET 4. Le modifiche al rendering influiscono sui controlli seguenti: * I controlli Image e ImageButton non eseguono più il rendering di un attributo border="0" .* La BaseValidator classe e i controlli di convalida che derivano da esso non eseguono più il rendering del testo rosso per impostazione predefinita.* Il controllo non effettua il rendering di un HtmlForm attributo.* Il controllo non rende più l'attributo Table .I controlli che non sono progettati per l'input da parte dell'utente (ad esempio, il controllo Label ) non eseguono più il rendering dell'attributo disabled="disabled" se la loro proprietà Enabled è impostata su false (o se ereditano questa impostazione da un controllo contenitore). |
Se si usa Visual Studio per aggiornare l'applicazione da ASP.NET 2.0 o ASP.NET 3.5, lo strumento aggiunge automaticamente un'impostazione al file Web.config che mantiene il rendering legacy. Tuttavia, se si aggiorna un'applicazione modificando il pool di applicazioni in IIS per puntare a .NET Framework 4, ASP.NET utilizza per impostazione predefinita la nuova modalità di rendering. Per disabilitare la nuova modalità di rendering, aggiungere l'impostazione seguente al file Web.config:<pages controlRenderingCompatibilityVersion="3.5" /> |
Gestori eventi nei documenti predefiniti | ASP.NET 4 esegue il rendering del valore dell'attributo dell'elemento form HTML action come stringa vuota quando viene effettuata una richiesta a un URL senza estensione con un documento predefinito mappato. Nelle versioni precedenti di ASP.NET, una richiesta a http://contoso.com restituirà una richiesta di Default.aspx. In tale documento, il rendering del tag di apertura form verrà eseguito come nell'esempio seguente:<form action="Default.aspx" /> In ASP.NET 4, una richiesta a http://contoso.com si traduce anche in una richiesta a Default.aspx, ma ora ASP.NET esegue il rendering del tag HTML di apertura form come nell'esempio seguente:<form action="" /> Quando l'attributo action è una stringa vuota, l'oggetto IIS DefaultDocumentModule crea una richiesta figlio per Default.aspx. Nella maggior parte delle condizioni, questa richiesta secondaria è trasparente per il codice dell'applicazione stessa e la pagina Default.aspx viene eseguita normalmente. Tuttavia, una potenziale interazione tra codice gestito e IIS 7 o IIS 7.5 in modalità Integrata può causare l'interruzione del corretto funzionamento delle pagine .aspx gestite durante la richiesta figlia. Se si verificano le condizioni seguenti, la richiesta secondaria a un documento .aspx predefinito genererà un errore o un comportamento imprevisto.* Una pagina .aspx viene inviata al browser con l'attributo form dell'elemento action impostato su "".* Il modulo viene pubblicato di nuovo in ASP.NET. * Un modulo HTTP gestito legge parte del corpo dell'entità, ad esempio Request.Form o Request.Params . In questo modo il corpo dell'entità della richiesta POST viene letto nella memoria gestita. Di conseguenza, il corpo dell'entità non è più disponibile per i moduli di codice nativo in esecuzione in modalità integrata IIS 7 o IIS 7.5.* L'oggetto IIS DefaultDocumentModule viene infine eseguito e genera una richiesta figlia per il documento Default.aspx. Tuttavia, poiché il corpo della richiesta è già stato letto da una parte di codice gestito, non è disponibile alcun corpo della richiesta da inviare alla richiesta figlia.* Quando la pipeline HTTP viene eseguita per la richiesta secondaria, il gestore per i file .aspx viene eseguito durante la fase di esecuzione del gestore di richieste. Poiché non è presente alcun corpo dell'entità, non sono presenti variabili di modulo e nessun stato di visualizzazione. Non sono pertanto disponibili informazioni per il gestore di pagine .aspx per determinare quale evento (se presente) deve essere generato. Di conseguenza, nessuno dei gestori di eventi di postback viene eseguito per la pagina .aspx interessata. |
Per informazioni sui modi per risolvere i problemi che potrebbero sorgere a causa di questa modifica, vedere "I gestori eventi potrebbero non essere attivati in un documento predefinito in modalità integrata di IIS 7 o IIS 7.5" nel documento Modifiche critiche di ASP.NET 4 sul sito Web ASP.NET. |
Algoritmo di hashing | ASP.NET usa algoritmi di crittografia e hash per proteggere i dati, ad esempio i cookie di autenticazione basata su moduli e lo stato di visualizzazione. Per impostazione predefinita, ASP.NET 4 usa l'algoritmo HMACSHA256 per le operazioni hash sui cookie e sullo stato di visualizzazione. Nelle versioni precedenti di ASP.NET è stato usato l'algoritmo precedente HMACSHA1 . | Se si eseguono applicazioni che combinano ASP.NET 2.0 e ASP.NET 4, in cui i dati come i cookie di autenticazione basata su moduli devono funzionare tra le versioni di .NET Framework, configurare un'applicazione Web ASP.NET 4 per usare l'algoritmo precedente HMACSHA1 aggiungendo l'impostazione seguente nel file Web.config:<machineKey validation="SHA1" /> |
Controlli di hosting in Internet Explorer | Non è più possibile ospitare controlli Windows Form in Internet Explorer, perché esistono soluzioni migliori per l'hosting dei controlli sul Web. Di conseguenza, gli assembly IEHost.dll e IEExec.exe sono stati rimossi da .NET Framework. | È possibile usare le tecnologie seguenti per lo sviluppo di controlli personalizzati nelle applicazioni Web: * È possibile creare un'applicazione Silverlight e configurarla per l'esecuzione all'esterno del browser. Per ulteriori informazioni, vedere supporto per operazioni fuori dal browser. * È possibile compilare un'applicazione browser XAML (XBAP) per sfruttare le funzionalità WPF (richiede .NET Framework nei computer client). Per altre informazioni, vedere "Panoramica delle applicazioni browser XAML WPF" |
Metodi HtmlEncode e UrlEncode | I metodi HtmlEncode e UrlEncode delle classi HttpUtility e HttpServerUtility sono stati aggiornati per codificare il carattere virgolette singola (').* Il HtmlEncode metodo codifica le istanze delle virgolette singole come ' * Il UrlEncode metodo codifica le istanze delle virgolette singole come %27 |
Esaminare il codice per individuare le posizioni in cui si usano i HtmlEncode metodi e UrlEncode e assicurarsi che la modifica nella codifica non comporti una modifica che influirà sull'applicazione. |
Errori HttpException nelle applicazioni ASP.NET 2.0 | Dopo aver abilitato ASP.NET 4 in IIS 6, ASP.NET applicazioni 2.0 eseguite in IIS 6 (in Windows Server 2003 o Windows Server 2003 R2) potrebbero generare errori come i seguenti: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
* Se ASP.NET 4 non è necessario per eseguire il sito Web, eseguire nuovamente il mapping del sito per usare ASP.NET 2.0. oppure * Se è necessario ASP.NET 4 per eseguire il sito Web, spostare qualsiasi directory virtuale figlio di ASP.NET 2.0 in un sito Web diverso associato ad ASP.NET 2.0. oppure * Disabilitare gli URL senza estensione. Per ulteriori informazioni, vedere "Le applicazioni ASP.NET 2.0 potrebbero generare errori HttpException che fanno riferimento a eurl.axd" nel documento ASP.NET 4: Modifiche di rilievo disponibile sul sito Web di ASP.NET. |
Tipi di appartenenza | Alcuni tipi (ad esempio, MembershipProvider) usati nella gestione degli utenti di ASP.NET sono stati spostati dall'assembly System.Web.dll all'assembly System.Web.ApplicationServices.dll. I tipi sono stati spostati per risolvere le dipendenze a livelli dell'architettura tra i tipi nel client e negli SKU di .NET Framework estesi. | Le librerie di classi aggiornate da versioni precedenti di ASP.NET e che usano i tipi di appartenenza spostati potrebbero non riuscire a essere compilate quando vengono usate in un progetto ASP.NET 4. In tal caso, aggiungere un riferimento nel progetto di libreria di classi per System.Web.ApplicationServices.dll. |
Modifiche al controllo menu | Le modifiche apportate al Menu controllo comportano il comportamento seguente: * Se MenuRenderingMode è impostato su List o se MenuRenderingMode è impostato su Default e ControlRenderingCompatibilityVersion è impostato su 4.0 o versione successiva, la PopOutImageUrl proprietà non ha alcun effetto.* Se il percorso impostato nelle StaticPopOutImageUrl proprietà e DynamicPopOutImageUrl contiene una barra rovesciata (\), le immagini non eseguono il rendering. Nelle versioni precedenti di ASP.NET, il percorso potrebbe includere una barra rovesciata. |
Invece di impostare la proprietà PopOutImageUrl per le singole voci di menu, impostare la StaticPopOutImageUrl o DynamicPopOutImageUrl del controllo padre Menu. oppure Impostare MenuRenderingMode su Table , o impostare MenuRenderingMode su Default e impostare ControlRenderingCompatibilityVersion su 3.5 . Queste impostazioni fanno sì che il Menu controllo usi il layout basato su tabella HTML usato nelle versioni precedenti di ASP.NET.* Se il percorso nella proprietà StaticPopOutImageUrl o DynamicPopOutImageUrl contiene una barra rovesciata (\), sostituire con un carattere barra (/). |
Assemblaggio di dispositivi mobili nel file Web.config | Nelle versioni precedenti di ASP.NET, un riferimento all'assembly System.Web.Mobile.dll è stato incluso nel file radice Web.config nella sezione assemblies sotto system.web /compilation . Per migliorare le prestazioni, il riferimento a questo assembly è stato rimosso.Nota: l'assembly System.Web.Mobile.dll e i controlli mobili ASP.NET sono inclusi in ASP.NET 4, ma sono obsoleti. |
Se si desidera utilizzare tipi dell'assembly, aggiungere un riferimento all'assembly nel file radice Web.config oppure in un file dell'applicazione Web.config. |
Caching dell'output | In ASP.NET 1.0, un bug ha fatto sì che le pagine memorizzate nella cache che specificavano Location="ServerAndClient" come impostazione di output-cache generassero un'intestazione Vary:* HTTP nella risposta. Questo ha avuto l'effetto di indicare ai browser client di non memorizzare mai nella cache la pagina in locale. In ASP.NET 1.1 è stato aggiunto il SetOmitVaryStar metodo , che può essere chiamato per eliminare l'intestazione Vary:* . Tuttavia, i report sui bug suggeriscono che gli sviluppatori non sono a conoscenza del comportamento esistente SetOmitVaryStar .In ASP.NET 4, l'intestazione Vary:* HTTP non viene più generata dalle risposte che specificano la direttiva seguente:<%@ OutputCache Location="ServerAndClient" %> Di conseguenza, il SetOmitVaryStar metodo non è più necessario per eliminare l'intestazione Vary:* . Nelle applicazioni che specificano "ServerAndClient" per l'attributo Location , le pagine saranno memorizzate nella cache nel browser senza che sia necessario chiamare SetOmitVaryStar. |
Se le pagine nell'applicazione devono generare Vary:* , chiamare il AppendHeader metodo come illustrato nell'esempio seguente:System.Web.HttpResponse.AppendHeader("Vary","*"); In alternativa, è possibile modificare il valore dell'attributo della cache dell'output Location in "Server". |
Analisi delle pagine | Il parser di pagine per ASP.NET pagine Web (file .aspx) e i controlli utente (file con estensione ascx) è più restrittivo in ASP.NET 4 rispetto alle versioni precedenti di ASP.NET e contrassegna più markup come non valido rispetto alle versioni precedenti. | Esaminare i messaggi di errore generati quando viene eseguita una pagina e correggere gli errori risultanti da markup non valido. |
Tipi di passaporto | Il supporto passport integrato in ASP.NET 2.0 è obsoleto e non è supportato a causa delle modifiche apportate a Passport (ora Live ID SDK). Di conseguenza, i tipi correlati a Passport in System.Web.Security sono ora contrassegnati con l'attributo ObsoleteAttribute . |
Modificare qualsiasi codice che usa i tipi Passport nello spazio dei nomi System.Web.Security (ad esempio, PassportIdentity) per usare il "Windows Live ID SDK". |
Informazioni pathInfo nella proprietà FilePath | ASP.NET 4 non include più il PathInfo valore nei valori restituiti da proprietà come FilePath, AppRelativeCurrentExecutionFilePathe CurrentExecutionFilePath. Le informazioni sono disponibili invece in PathInfo PathInfo. Immagina, ad esempio, il seguente frammento di URL:/testapp/Action.mvc/SomeAction Nelle versioni precedenti di ASP.NET le HttpRequest proprietà hanno i valori seguenti: * FilePath: /testapp/Action.mvc/SomeAction * PathInfo: (vuoto) In ASP.NET 4 le HttpRequest proprietà hanno invece i valori seguenti: * FilePath: /testapp/Action.mvc * PathInfo: SomeAction |
Esaminare il codice per individuare le posizioni in cui ci si basa sulle proprietà della HttpRequest classe per restituire informazioni sul percorso. Modificare il codice in modo da riflettere le modifiche apportate alle informazioni sul percorso restituite. |
Convalida della richiesta | Per migliorare la convalida delle richieste, la convalida della richiesta di ASP.NET viene richiamata in precedenza nel ciclo di vita della richiesta. Di conseguenza, la convalida delle richieste viene eseguita per le richieste che non sono per i file .aspx, ad esempio per le chiamate al servizio Web e per i gestori personalizzati. La convalida delle richieste sarà attiva anche quando i moduli HTTP personalizzati sono in esecuzione nella pipeline di elaborazione delle richieste. In seguito a questa modifica, le richieste di risorse diverse da .aspx file potrebbero generare errori di convalida delle richieste. Il codice personalizzato eseguito nella pipeline di richiesta (ad esempio moduli HTTP personalizzati) potrebbe anche generare errori di convalida delle richieste. |
Se necessario, è possibile ripristinare il comportamento precedente di avere solo .aspx pagine che attivano la convalida delle richieste usando l'impostazione seguente nel file di configurazione Web:<httpRuntime requestValidationMode="2.0" /> Avviso: se si ripristina il comportamento precedente, assicurarsi che tutto il codice in gestori, moduli e altro codice personalizzato esegua controlli per input HTTP potenzialmente non sicuri che potrebbero essere vettori di attacco XSS. |
Instradamento | Se si crea un sito Web del file system in Visual Studio 2010 e il sito Web si trova in una cartella contenente un punto (.) nel nome della cartella, il routing url non funzionerà in modo affidabile. Viene restituito un errore HTTP 404 da alcuni percorsi virtuali. Ciò si verifica perché Visual Studio 2010 avvia Visual Studio Development Server usando un percorso non corretto per la directory virtuale radice. | * Nella pagina Proprietà del sito Web basato su file modificare l'attributo Percorso virtuale in "/". oppure * Creare un progetto di applicazione Web invece di un progetto di sito Web. I progetti dell'applicazione Web non presentano questo problema e il routing degli URL funziona anche se la cartella del progetto ha un punto nel nome. oppure * Creare un sito Web basato su HTTP ospitato in IIS. I siti Web ospitati in IIS possono avere punti nel percorso virtuale e nella cartella del file di progetto. |
Siti di SharePoint | Se si tenta di eseguire un sito Web ASP.NET 4 distribuito come figlio di un sito Web di SharePoint contenente un livello di attendibilità parziale personalizzato denominato WSS_Minimal , verrà visualizzato l'errore seguente:Could not find permission set named 'ASP.Net'. |
Attualmente, nessuna versione di SharePoint è compatibile con ASP.NET. Di conseguenza, non è consigliabile tentare di eseguire un sito Web ASP.NET 4 come figlio di un sito Web di SharePoint. |
Standard XHTML 1.1 | Per abilitare la conformità XHTML 1.1 per i nuovi siti Web, i controlli ASP.NET in .NET Framework 4 genereranno codice HTML conforme a XHTML 1.1. Questo rendering è abilitato usando l'opzione seguente nel file Web.config all'interno dell'elemento <system.Web> :<pages controlRenderingCompatibilityVersion="4.0"/> Questa opzione è impostata per impostazione predefinita su 4.0. I progetti Web aggiornati da Visual Studio 2008 hanno l'impostazione 3.5 abilitata per la compatibilità. |
Nessuno. |
Nucleo
Funzionalità generali
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
CardSpace | Windows CardSpace non è più incluso in .NET Framework; viene fornito separatamente. | Scarica Windows CardSpace dal Centro Download Microsoft. |
File di configurazione | Sono state apportate correzioni nel modo in cui .NET Framework accede ai file di configurazione dell'applicazione. | Se il file di configurazione dell'applicazione è denominato application-name.config, rinominarlo in application-name.exe.config. Ad esempio, rinominare MyApp.config in MyApp.exe.config. |
Compilatore di codice C# | Le classi Compiler , CompilerError e ErrorLevel presenti nello spazio dei nomi Microsoft.CSharp non sono più disponibili, e il loro assembly (cscompmgd.dll) non è più incluso in .NET Framework. |
Usare la classe CodeDomProvider e altre classi nel namespace System.CodeDom.Compiler. Per altre informazioni, vedere Uso di CodeDOM. |
Hosting (API non gestita) | Per migliorare le funzionalità di hosting, alcune delle API di attivazione dell'hosting sono state deprecate. Le funzionalità di esecuzione side-by-side in-process consentono a un'applicazione di caricare e avviare più versioni di .NET Framework nello stesso processo. Ad esempio, è possibile eseguire applicazioni che caricano componenti aggiuntivi (o componenti) basati su .NET Framework 2.0 SP1 e componenti aggiuntivi basati su .NET Framework 4 nello stesso processo. I componenti meno recenti continuano a usare la versione precedente di .NET Framework e i nuovi componenti usano la nuova versione di .NET Framework. | Usare le configurazioni descritte in In-Process esecuzione affiancata. |
Nuovo modello di sicurezza | I criteri di sicurezza dall'accesso al codice (CAS) sono stati disattivati e sostituiti con un modello semplificato, come descritto in Modifiche alla sicurezza in .NET Framework 4. | Le modifiche possono essere necessarie se si fa affidamento su CAS nelle applicazioni. Per altre informazioni, vedere Compatibilità e migrazione dei criteri di sicurezza dell'accesso al codice. |
Data e ora
Namespace: System
Assembly: mscorlib (in mscorlib.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Ora Legale | Per essere coerenti con l'orologio di sistema, le proprietà dell'ora (ad esempio Local e Now) ora usano regole del sistema operativo anziché altri dati di .NET Framework per le operazioni di ora legale. | Nessuno. |
Formattazione di stringhe | Per supportare la formattazione sensibile alle impostazioni cultura, la struttura TimeSpan include nuovi overload dei metodi ToString , Parse e TryParse , oltre ai nuovi metodi ParseExact e TryParseExact . |
Nessuno. |
Globalizzazione
Per un elenco delle nuove culture neutrali e specifiche, vedere Novità nella globalizzazione e localizzazione.
Namespace: System.Globalization
Assembly: mscorlib (in mscorlib.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Nomi delle culture | Le seguenti modifiche al nome influiscono sulle culture tedesca, divehi e africana. * CurrencyEnglishName: Il nome della valuta per la cultura tedesco (Svizzera) (de-CH) è cambiato da "sFr." a "Fr.". * LongDatePattern: Il formato di data lunga per la cultura Divehi (Maldive) (dv-MV) è cambiato da "dd/MMMM/yyyy" a "dd/MM/yyyy". * PMDesignator: il designatore P.M. delle impostazioni cultura afrikaans (Sudafrica) (af-ZA) è cambiato da "nm" a "PM". |
Annotare le modifiche al nome della cultura. |
Parametro LCID | Per garantire coerenza con il comportamento previsto nelle impostazioni del server di automazione, il CLR non passa più la cultura corrente per il parametro LCID alle applicazioni basate su COM non gestite. Invece, passa 1033 (en-us) per le impostazioni culturali. |
Nessuna modifica necessaria ad eccezione delle applicazioni native che richiedono una cultura specificata. |
Tipi di cultura obsoleti | I tipi di cultura CultureTypes e CultureTypes sono ora obsoleti. Per garantire la compatibilità con le versioni precedenti, CultureTypes ora restituisce culture neutre e specifiche che erano incluse nelle versioni precedenti del .NET Framework, mentre CultureTypes ora restituisce un elenco vuoto. |
Utilizzare altri valori dell'enumerazione CultureTypes . |
Recupero della cultura | A partire da Windows 7, .NET Framework 4 recupera le informazioni culturali dal sistema operativo anziché archiviare i dati. .NET Framework viene inoltre sincronizzato con Windows per l'ordinamento e la gestione delle maiuscole e minuscole. | Nessuno. |
Standard Unicode 5.1 | .NET Framework supporta ora tutti i caratteri Unicode 5.1, un'aggiunta di circa 1400 caratteri. I caratteri aggiuntivi includono nuovi simboli, frecce, segni diacritici, punteggiatura, simboli matematici, tratti CJK e ideogrammi, caratteri numerici malayalam e Telugu, e vari caratteri numerici Myanmar, latino, arabo, greco, mongolo e cirillico. I nuovi script seguenti sono supportati con Unicode 5.1: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu e Caratteri malayalam e Cham. | Nessuno. |
Eccezioni
Namespace: System, System.Runtime.ExceptionServices
Assembly: mscorlib (in mscorlib.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Eccezioni per lo stato del processo danneggiato | CLR non recapita più eccezioni per lo stato del processo danneggiato ai gestori di eccezioni nel codice gestito. | Queste eccezioni indicano che lo stato di un processo è stato danneggiato. Non è consigliabile eseguire l'applicazione in questo stato. Per ulteriori informazioni, vedere il HandleProcessCorruptedStateExceptionsAttribute e la voce Gestione delle eccezioni di stato corrotto nella rivista MSDN Magazine. |
Eccezioni del motore di esecuzione | ExecutionEngineException è ora obsoleto, perché un'eccezione intercettabile consentirà l'esecuzione di un processo instabile. Questa modifica migliora la prevedibilità e l'affidabilità nel runtime. | Usare un InvalidOperationException per segnalare la condizione. |
Riflessione
Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Algoritmi hash dell'assembly | La proprietà HashAlgorithm ora restituisce AssemblyHashAlgorithm, perché il runtime non conosce l'algoritmo hash dell'assembly a cui si fa riferimento, quando l'assembly non viene caricato. Questo si riferisce all'uso della proprietà in un assembly a cui si fa riferimento, come quello che viene restituito dal metodo GetReferencedAssemblies. | Nessuno. |
Caricamento dell'assembly | Per evitare il caricamento ridondante degli assembly e per risparmiare spazio indirizzi virtuale, CLR carica ora gli assembly usando solo la funzione Win32 MapViewOfFile . Non chiama più la funzione LoadLibrary .Questa modifica influisce sulle applicazioni di diagnostica nei modi seguenti: * Un ProcessModuleCollection oggetto non conterrà più moduli di una libreria di classi (.dll file), come ottenuto da una chiamata a Process.GetCurrentProcess().Modules .* Le applicazioni Win32 che usano la EnumProcessModules funzione non vedranno tutti i moduli gestiti elencati. |
Nessuno. |
Dichiarazione del tipo | La DeclaringType proprietà restituisce ora correttamente null quando il tipo non dispone di un tipo dichiarante. | Nessuno. |
Delegati | Un delegato genera ora un'eccezione ArgumentNullException anziché un oggetto NullReferenceException quando viene passato un valore nullo al costruttore del delegato. | Assicurarsi che qualsiasi gestione delle eccezioni risolva ArgumentNullException. |
Modifica del percorso della Global Assembly Cache | Per gli assembly .NET Framework 4, la Global Assembly Cache è stata spostata dalla directory di Windows (%WINDIR%) alla sottodirectory Microsoft.Net (%WINDIR%\Microsoft.Net). Gli assembly delle versioni precedenti rimangono nella directory precedente. L'enumerazione ASM_CACHE_FLAGS non gestita contiene il nuovo ASM_CACHE_ROOT_EX flag. Questo flag ottiene il percorso della cache per gli assembly .NET Framework 4, che possono essere ottenuti dalla funzione GetCachePath . |
Nessuno, presupponendo che le applicazioni non usino percorsi espliciti per gli assembly, che non è una procedura consigliata. |
Strumento Global Assembly Cache | Il Gacutil.exe (Strumento Global Assembly Cache) non supporta più il visualizzatore del plug-in di shell. | Nessuno. |
Interoperabilità
Namespace: System.Runtime.InteropServices
Assembly: mscorlib (in mscorlib.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Lunghezza del buffer (API non gestita) | Per risparmiare memoria, la funzionalità per il parametro per il pBufferLengthOffset metodo ICorProfilerInfo2::GetStringLayout è stata modificata in modo che corrisponda al pStringLengthOffset parametro . Entrambi i parametri ora puntano alla posizione di offset della lunghezza della stringa. La lunghezza del buffer è stata rimossa dalla rappresentazione della classe stringa. |
Rimuovere qualsiasi dipendenza dalla lunghezza del buffer. |
Debugging JIT | Per semplificare la registrazione per il debug JIT (Just-In-Time), il debugger di .NET Framework usa ora solo la chiave del Registro di sistema AeDebug, che controlla il comportamento di debug JIT per il codice nativo. Questa modifica comporta quanto segue: * Non è più possibile registrare due debugger diversi per codice gestito e nativo. * Non è più possibile avviare automaticamente il debugger per un processo non interattivo, ma è possibile richiedere all'utente un processo interattivo. * Non si riceve più una notifica quando l'avvio del debugger non riesce o quando non è presente alcun debugger registrato che deve essere avviato. * I criteri di avvio automatico che dipendono dall'interattività dell'applicazione non sono più supportati. |
Modificare le operazioni di debug in base alle esigenze. |
Platform invoke | Per migliorare le prestazioni di interoperabilità con codice non gestito, le convenzioni di chiamata non corrette in una piattaforma invoke ora causano un errore dell'applicazione. Nelle versioni precedenti, il livello di marshalling ha risolto questi errori nello stack. | Il debug delle applicazioni in Microsoft Visual Studio avvisa l'utente di questi errori in modo da poterle correggere. Se si dispone di file binari che non possono essere aggiornati, è possibile includere l'elemento <NetFx40_PInvokeStackResilience> nel file di configurazione dell'applicazione per consentire la risoluzione degli errori di chiamata allo stack come nelle versioni precedenti. Tuttavia, ciò può influire sulle prestazioni dell'applicazione. |
Interfacce rimosse (API non gestita) | Per evitare confusione per gli sviluppatori, le interfacce seguenti sono state rimosse, perché non hanno fornito scenari di runtime utili e CLR non ha fornito o accettato alcuna implementazione: * INativeImageINativeImageDependency * INativeImageInstallInfo * INativeImageEvaluate * INativeImageConverter * ICorModule * IMetaDataConverter |
Nessuno. |
Dati
In questa sezione vengono descritti i problemi di migrazione per l'uso di set di dati e client SQL, Entity Framework, LINQ to SQL e WCF Data Server (in precedenza noti come ADO.NET Data Services).
DataSet e SQL Client
La tabella seguente descrive i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Spazi dei nomi: System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient
Assembly: System.Data (in System.Data.dll), System.Data.Entity (in System.Data.Entity.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Scenari POCO | L'interfaccia IRelatedEnd include nuovi metodi per migliorare l'usabilità negli scenari POCO (Plain Old CLR Object). Questi nuovi metodi accettano un'entità Object anziché un'entità IEntityWithRelationships come parametro. |
Modifica di righe | Il IndexOf metodo, come implementato dalla DataView classe , restituisce ora correttamente il valore di una riga che viene modificata, anziché restituire -1. |
Avvenimenti | L'evento PropertyChanged viene ora generato quando una riga si trova in uno stato modificato e viene chiamato il RejectChanges metodo . Questa modifica semplifica la creazione di controlli dell'interfaccia utente che espongono il contenuto di un DataSet oggetto. |
Eccezioni | Il metodo Prepare ora genera un'eccezione InvalidOperationException quando una connessione non è impostata o aperta, anziché un'eccezione NullReferenceException. |
Viste di mappatura | Gli errori di mapping delle viste delle query vengono ora rilevati in fase di progettazione anziché generare un'eccezione NullReferenceException in fase di esecuzione. La convalida del mapping rileva ora l'errore in cui vengono mappati due set di associazioni nello schema concettuale (CSDL) alla stessa colonna. |
Transazioni | Se un'app tenta di eseguire un'istruzione su una connessione dopo il completamento di una transazione (inclusa l'interruzione o l'annullamento), viene generata un'eccezione InvalidOperationException. Le versioni precedenti non generano un'eccezione e consentono di eseguire comandi aggiuntivi anche se una transazione è stata interrotta. |
Entity Framework
La tabella seguente descrive i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Spazi dei nomi: System.Data, System.Data.Objects, System.Data.Objects.DataClasses
Assembly: System.Data.Entity (in System.Data.Entity.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Oggetti entità | Esiste ora parità tra il Detach metodo e lo stato dell'oggetto entità quando viene chiamato il SaveChanges metodo . Questa coerenza migliorata impedisce la generazione di eccezioni impreviste. |
Entity SQL | Le regole sono state migliorate per le risoluzioni degli identificatori in Entity SQL. Il parser Entity SQL ha migliorato la logica per la risoluzione degli identificatori multipart. |
Annotazioni strutturali | Entity Framework ora riconosce le annotazioni strutturali. |
Query | Nelle query sono stati apportati i miglioramenti seguenti: * Una GroupBy query che usa una chiave Null su una raccolta vuota non restituirà alcuna riga, indipendentemente dal fatto che nella query siano presenti selezioni aggiuntive.* SQL generato in LINQ e le query Entity-SQL ora trattano i parametri stringa come valori non Unicode per impostazione predefinita. |
LINQ to SQL
La tabella seguente descrive i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Namespace: System.Data.Linq
Assembly: System.Data.Linq (in System.Data.Linq.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Avvenimenti | Una EntitySet<TEntity> raccolta genera ora l'evento ListChanged per le operazioni di aggiunta e rimozione se l'oggetto EntitySet<TEntity> viene scaricato, oltre a generare l'evento quando viene caricata la raccolta. |
Query |
Skip(0) non viene più ignorato nelle query LINQ to SQL. Di conseguenza, le query con questo metodo potrebbero comportarsi in modo diverso. In alcuni casi, ad esempio, è necessaria una OrderBy clausola con Skip(0) e la query genererà ora un'eccezione NotSupportedException se la OrderBy clausola non è stata inclusa. |
WCF Data Services
La tabella seguente descrive i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Spazi dei nomi: System.Data.Services, System.Data.Services.Client, System.Data.Services.Common, System.Data.Services.Providers
Assembly: System.Data.Services (in System.Data.Services.dll), System.Data.Services.Client (in System.Data.Services.Client.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Contenuto binario raggruppato | WCF Data Services supporta ora il contenuto binario in batch nelle richieste e nelle risposte. |
Intercettori di cambiamento | Gli intercettori di modifica vengono ora eseguiti per una richiesta di eliminazione. Un intercettore di modifiche è un metodo che viene eseguito ogni volta che viene ricevuta una richiesta dal server per modificare un'entità nel set di entità. Viene eseguito prima dell'esecuzione della richiesta in arrivo. L'intercettore di modifiche fornisce l'accesso all'entità da modificare e all'operazione eseguita su di essa. |
Eccezioni | Le seguenti condizioni ora generano eccezioni più utili anziché un NullReferenceException. * Un TimeoutException quando si verifica un timeout di una chiamata a un servizio dati. * Quando si effettua una richiesta non valida a un servizio dati. Nelle applicazioni è necessario modificare la gestione delle eccezioni per rilevare le nuove eccezioni. |
Intestazioni | Sono stati apportati i miglioramenti seguenti alle intestazioni: * WCF Data Services ora rifiuta correttamente un'intestazione eTag con un valore non specificato.* WCF Data Services restituisce ora un errore e non esegue la richiesta di eliminazione a un collegamento quando un'intestazione if-* si trova nella richiesta.* WCF Data Services restituisce ora un errore al client nel formato (Atom, JSON) specificato dal client nell'intestazione Accept. |
Lettore JSON | Il lettore JAVAScript Object Notation (JSON) restituisce ora correttamente un errore quando legge il carattere di escape ("\") della singola barra rovesciata, quando elabora i payload JSON inviati a un servizio dati WCF. |
Unisce | Sono stati apportati i miglioramenti seguenti all'enumerazione MergeOption : * L'opzione MergeOption di unione non modifica più l'entità sul client in seguito a qualsiasi risposta successiva da un servizio dati. * L'opzione MergeOption è ora coerente tra gli aggiornamenti dinamici basati su SQL e stored procedure. |
Richieste | Il metodo viene ora chiamato prima dell'elaborazione OnStartProcessingRequest di una richiesta ai servizi dati. In questo modo la richiesta funziona correttamente per i ServiceOperation servizi. |
Flussi | WCF Data Services non chiude più il flusso sottostante per le operazioni di lettura e scrittura. |
URI | L'escape degli URI dal client WCF Data Services è stato corretto. |
Windows Communication Foundation (WCF)
La tabella seguente descrive i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
File di configurazione | Per abilitare l'ereditarietà dei comportamenti tramite la gerarchia dei file di configurazione, WCF supporta ora l'unione tra i file di configurazione. Il modello di ereditarietà della configurazione è ora espanso per consentire agli utenti di definire comportamenti che verranno applicati a tutti i servizi in esecuzione nel computer. Se sono presenti comportamenti con lo stesso nome a livelli diversi della gerarchia, è possibile che si verifichino modifiche comportamentali. |
Hosting del servizio | Non è più possibile specificare l'elemento <serviceHostingEnvironment> di configurazione a livello di servizio aggiungendo l'attributo allowDefinition="MachineToApplication" alla definizione dell'elemento.Specificare l'elemento <serviceHostingEnvironment> a livello di servizio è tecnicamente errato e causa un comportamento incoerente. |
WPF (Windows Presentation Foundation)
Applicazioni
Namespace: System.Windows, System.Windows.Controls
Assemblaggi: PresentationFramework (in PresentationFramework.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Gestione delle eccezioni | Per consentire di rilevare gli errori prima, WPF genera un TargetInvocationException e imposta la proprietà InnerException su eccezioni critiche, ad esempio NullReferenceException, OutOfMemoryException, StackOverflowException, e SecurityException, anziché intercettare l'originale eccezione. | Nessuno. |
Risorse collegate | Per semplificare il collegamento, i file di risorse (ad esempio le immagini) che si trovano in una posizione diversa dalla struttura di cartelle del progetto usano il percorso completo del file di risorse anziché solo il nome del file come ID risorsa al momento della compilazione dell'applicazione. L'applicazione sarà in grado di individuare i file in fase di esecuzione. | Nessuno. |
Applicazioni con attendibilità parziale | Per considerazioni sulla sicurezza, le applicazioni basate su Windows che vengono eseguite in ambiente di fiducia parziale e contengono un WebBrowser controllo, o un Frame controllo che contiene HTML, genereranno un'eccezione SecurityException durante la creazione del controllo. Le applicazioni browser genereranno un'eccezione e visualizzeranno un messaggio se vengono soddisfatte tutte le condizioni seguenti: * L'applicazione è in esecuzione in Firefox. * L'applicazione viene eseguita con attendibilità parziale nell'area Internet da siti non attendibili. * L'applicazione contiene un WebBrowser controllo o un Frame controllo che contiene HTML. Le applicazioni eseguite da siti attendibili o dall'area Intranet non saranno interessate. |
Nelle applicazioni browser è possibile semplificare questa modifica eseguendo una delle operazioni seguenti: * Eseguire l'applicazione del browser con attendibilità totale. * Chiedere ai clienti di aggiungere il sito dell'applicazione all'area siti attendibili. |
Dizionari risorse | Per migliorare i dizionari delle risorse a livello di tema e impedirne la modifica, le risorse congelabili definite in un dizionario delle risorse e unite in un dizionario a livello di tema sono ora contrassegnate come congelate e immutabili. Si tratta del comportamento previsto per le risorse congelabili. | Le applicazioni che modificano una risorsa definita in un dizionario unito a livello di tema devono clonare la risorsa e modificare la copia clonata. In alternativa, la risorsa può essere contrassegnata x:Shared="false" in modo che crei una nuova copia ogni volta che ResourceDictionary viene eseguita una query sulla risorsa. |
Windows 7 | Per migliorare il funzionamento delle applicazioni WPF in Windows 7, sono stati apportati i miglioramenti seguenti per correggere il comportamento di una finestra: * Gli stati di aggancio e di gesto ora funzionano come ci si aspetta in base alle interazioni dell'utente. * I comandi della barra delle applicazioni Finestre a catena, Mostra finestre in pila e Mostra finestre affiancate ora hanno il comportamento corretto e aggiornano le proprietà appropriate. * Le proprietà Top , Left , Width e Height per una finestra massimizzata o ridotta a icona ora contengono la corretta posizione di ripristino della finestra invece di altri valori, a seconda del monitor. |
Nessuno. |
Stile e trasparenza di Windows | Viene generata un'eccezione InvalidOperationException se si tenta di impostare WindowStyle su un valore diverso da WindowStyle quando AllowsTransparency è true e WindowState è WindowState. |
Se è necessario modificare WindowStyle quando AllowsTransparency è true , è possibile chiamare la funzione SetWindowLongPtr di Win32. |
Visualizzatore XPS | WPF non include il pacchetto Essentials di Microsoft XML Paper Specification (XPSEP). XPSEP è incluso in Windows 7 e Windows Vista. In un computer che esegue Windows XP senza .NET Framework 3.5 SP1 installato, la stampa tramite un'API WPF diversa da quella in PrintDialog si basa su WINSPOOL. Alcune funzionalità della stampante non verranno segnalate e alcune impostazioni della stampante non verranno applicate durante la stampa. |
Se necessario, installare Microsoft XML Paper Specification Essentials Pack. |
Controlli
Spazi dei nomi: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Assembly: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Finestre di dialogo | Per migliorare l'affidabilità, il ShowDialog metodo viene chiamato sullo stesso thread che ha creato il FileDialog controllo. | Assicurarsi di creare un FileDialog controllo e chiamare il ShowDialog metodo sullo stesso thread. |
Finestre mobili | Per correggere la logica di ripristino dello stato attivo che continua a riattivare erroneamente una finestra mobile (rendendola simile a una finestra di dialogo modale), il ripristino dello stato attivo viene ora impedito se il candidato non è un elemento figlio della finestra. | Nessuno. |
Elementi nelle raccolte | Quando un elemento viene spostato o aggiunto a una raccolta sottostante, viene visualizzato nella stessa posizione relativa se l'oggetto CollectionViewCollectionView non è ordinato. Ciò garantisce coerenza tra la posizione dell'elemento nella raccolta e nell'oggetto associato CollectionView. | Utilizzare il ContainerFromItem metodo o IndexOf per trovare la posizione di un elemento in un CollectionView anziché basarsi su una posizione fissa di un elemento. |
Layout | Per eliminare i ri-layout non necessari, modificare il ShowsNavigationUI non invalida più il layout né comporta un altro passaggio di layout. | Se si prevede che la modifica ShowsNavigationUI provocherà un altro passaggio di layout, chiamare InvalidateVisual dopo aver impostato la proprietà . |
menu | Per abilitare il testo ClearType nei popup del menu, sono state apportate modifiche alla ControlTemplate classe e al MenuItem controllo e ad altri controlli. | Le applicazioni non devono basarsi sulla struttura visiva dei modelli di controllo. Solo le parti denominate di un ControlTemplate fanno parte del contratto pubblico. Se un'applicazione deve trovare un determinato oggetto in un ControlTemplate, cercare nell'albero visivo un tipo specifico anziché basarsi su una posizione fissa di un oggetto nell'albero. |
Navigazione | Se un Frame passa direttamente a una posizione, la proprietà IsNavigationInitiator viene impostata true dopo la navigazione iniziale. Questa modifica impedisce la generazione di eventi aggiuntivi durante gli scenari di avvio. |
Nessuno. |
Popup | Il CustomPopupPlacementCallback delegato può ora essere chiamato più volte durante un passaggio di layout anziché una sola volta. | Se il delegato CustomPopupPlacementCallback calcola la posizione di un Popup in base alla sua posizione precedente, ricalcolare la posizione solo se i valori dei parametri popupSize , targetSize o offset cambiano. |
Valori delle proprietà | Il SetCurrentValue metodo consente ora di impostare una proprietà su un valore effettivo, anche se continua a rispettare qualsiasi associazione, stile o trigger che influisce sulla proprietà. | Gli autori di controlli devono usare SetCurrentValue ogni volta che il valore della proprietà cambia come effetto collaterale di un'altra azione, inclusa la manipolazione dell'utente. |
Caselle di testo | Per considerazioni sulla sicurezza, i metodi Copy e Cut falliscono silenziosamente quando vengono chiamati in attendibilità parziale. Inoltre, l'esecuzione programmatica della proprietà Copy o Cut su un controllo che eredita da TextBoxBase verrà bloccata in fiducia parziale. Tuttavia, i comandi di copia e taglio avviati dall'utente, ad esempio facendo clic su un pulsante la cui Command proprietà è associata a uno di questi comandi, funzioneranno. I comandi standard di copia e taglia tramite le scorciatoie da tastiera e il menu contestuale continueranno a funzionare come prima in un ambiente di attendibilità parziale. |
Associare il Copy comando o Cut a un'azione avviata dall'utente, ad esempio facendo clic su un pulsante. |
Grafica
Spazi dei nomi: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects
Assembly: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Effetti bitmap | Per migliorare le prestazioni, la BitmapEffect classe e le classi che ereditano dalla BitmapEffect classe , anche se ancora presenti, sono disabilitate. L'effetto verrà eseguito usando la pipeline di rendering con accelerazione hardware se sono vere le condizioni seguenti: * L'applicazione utilizza un DropShadowBitmapEffect o un BlurBitmapEffect che ha una proprietà del raggio impostata su meno di 100 DIU. * La scheda video nel computer che esegue l'applicazione supporta pixel shader 2.0. Se queste condizioni non vengono soddisfatte, un BitmapEffect oggetto non avrà alcun effetto. Visual Studio genera inoltre un avviso del compilatore quando rileva l'oggetto BitmapEffect o una sottoclasse. Il PushEffect metodo è contrassegnato come obsoleto. |
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 ereditando dalla ShaderEffect classe . |
Frame bitmap | Ora gli oggetti clonati BitmapFrame ricevono gli eventi DownloadProgress, DownloadCompleted e DownloadFailed. Questo consente alle immagini scaricate dal Web e applicate al controllo Image tramite un Style di funzionare correttamente. Verrà visualizzata una modifica del comportamento solo se tutte le istruzioni seguenti sono vere: * Ti iscrivi all'evento DownloadProgress, DownloadCompleted o DownloadFailed. * L'origine dell'oggetto BitmapFrame proviene dal Web. * L'oggetto BitmapFrame viene clonato mentre il download è ancora in corso. |
Verificare il mittente nel gestore eventi e procedere solo se il mittente è l'originale BitmapFrame. |
Decodifica di immagini | Per evitare che un oggetto IOException non venga gestito quando le immagini potrebbero non decodificare, la BitmapSource classe genererà l'evento DecodeFailed quando non decodifica un'immagine. | Rimuovere qualsiasi gestione delle eccezioni per IOException e utilizzare l'evento DecodeFailed per verificare la presenza di errori di decodifica. |
Inserimento
Spazi dei nomi: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Assembly: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Associazione delle istanze dei comandi | Per fornire un meccanismo per associare le istanze di comando basate su View Model ai movimenti di input basati su View, la classe InputBinding eredita ora da Freezable anziché da DependencyObject. Le proprietà seguenti sono ora proprietà di dipendenza: * Command * CommandParameter * CommandTarget Questa modifica comporta quanto segue: * Un InputBinding oggetto è ora bloccato quando viene registrato invece di rimanere modificabile. * Non è possibile accedere a oggetti a livello InputBinding di istanza da più thread, a causa delle restrizioni della DependencyObject classe . * Non è possibile modificare le associazioni di input a livello di classe dopo la registrazione, a causa delle restrizioni della Freezable classe. * Non è possibile specificare associazioni di input nelle istanze dei comandi create in un modello di visualizzazione. |
Creare istanze separate di una classe InputBinding su thread separati se i collegamenti devono essere modificabili o congelarli in caso contrario. Non modificare una variabile statica di classe InputBinding dopo che è stata registrata. |
Applicazioni browser | Applicazioni browser WPF (. XBAP) ora elabora gli eventi chiave proprio come le applicazioni WPF autonome in modo che gli oggetti ricevano eventi chiave indirizzati nell'ordine corretto. | Nessuno. |
Combinazioni di tasti morti | WPF offusca i tasti morti, che non producono caratteri visibili, ma indicano invece che il tasto deve essere combinato con il tasto di lettera successivo per produrre un carattere. Gli eventi di input dei tasti, ad esempio l'evento KeyDownEvent, segnalano quando un tasto è un tasto morto impostando la proprietà Key al valore Key. Questo comportamento è in genere previsto perché le applicazioni in genere non intendono rispondere all'input da tastiera che crea un carattere combinato. | Le applicazioni che prevedono di leggere chiavi che fanno parte di caratteri combinati possono ottenere la chiave ora offuscata usando la DeadCharProcessedKey proprietà . |
Gestore del focus | Quando al metodo FocusManager.GetFocusedElement(DependencyObject) è passato un elemento con la proprietà associata IsFocusScope impostata su true , il metodo restituisce un elemento che è l'ultimo a cui è stato dato il focus della tastiera all'interno di quel ambito di messa a fuoco, se e solo se l'elemento restituito appartiene allo stesso oggetto PresentationSource dell'elemento passato al metodo. |
Nessuno. |
Automazione interfaccia utente
Spazio dei nomi: System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.Data, System.Windows.Input
Assembly: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), UIAutomationProvider (in UIAutomationProvider.dll), WindowsBase (in WindowsBase.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Gerarchia di classi di viste | Le classi TreeViewAutomationPeer e TreeViewItemAutomationPeer ereditano da ItemsControlAutomationPeer anziché da FrameworkElementAutomationPeer. | se si eredita dalle classi TreeViewItemAutomationPeer ed esegue l'override del metodo GetChildrenCore, considerare la possibilità di restituire un oggetto che eredita dalla nuova classe TreeViewDataItemAutomationPeer. |
Contenitori fuori schermo | Per correggere un valore restituito non corretto, il IsOffscreenCore metodo ora restituisce false correttamente per i contenitori di elementi che vengono scorrere fuori dalla visualizzazione. Inoltre, il valore del metodo non è influenzato dall'occlusione da altre finestre o dal fatto che l'elemento sia visibile in un monitor specifico. |
Nessuno. |
Menu e oggetti figlio | Per abilitare l'automazione interfaccia utente dei menu che contengono elementi figlio diversi da MenuItem oggetti, il GetChildrenCore metodo restituisce ora l'oggetto AutomationPeer di un oggetto figlio UIElement anziché un MenuItemAutomationPeer oggetto . | Nessuno. |
Nuove interfacce e assemblaggio | Per abilitare nuove funzionalità per l'automazione interfaccia utente, sono state aggiunte le interfacce seguenti: * IItemContainerProvider * ISynchronizedInputProvider * IVirtualizedItemProvider |
Qualsiasi progetto che compila nodi di automazione WPF deve aggiungere un riferimento esplicito a UIAutomationProvider.dll. |
Pollici | Il GetClassNameCore metodo restituisce un valore anziché null. Di conseguenza, i controlli come GridSplitter che ereditano dalla classe Thumb segnalano un nome a UI Automation. | Nessuno. |
Elementi virtualizzati | Per migliorare le prestazioni, il GetChildrenCore metodo restituisce solo gli oggetti figlio effettivamente presenti nella struttura ad albero visuale, anziché tutti gli oggetti figlio, indipendentemente dal fatto che siano virtualizzati. | Usare ItemContainerPattern per scorrere tutti gli elementi di un oggetto ItemsControlAutomationPeer. |
XAML
Spazi dei nomi: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup
Assembly: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 | Modifiche consigliate |
---|---|---|
Estensione di markup | WPF ora usa sempre correttamente il valore del ProvideValue metodo anziché restituire l'oggetto in determinati casi quando viene usata un'estensione MarkupExtension di markup per impostare una proprietà o per creare un elemento in un insieme. Un'estensione di markup può restituire se stessa in alcuni casi. | Se la tua applicazione accede a una risorsa che ha restituito un oggetto MarkupExtension nelle versioni precedenti, fai riferimento all'oggetto restituito da ProvideValue, anziché all'oggetto MarkupExtension. |
Analisi degli attributi | Gli attributi in XAML possono ora avere un solo punto. Ad esempio, i valori seguenti sono validi:<Button Background="Red"/> (nessun punto)<Button Button.Background = "Red"/> (un punto)Il codice seguente non è più valido: <Button Control.Button.Background = "Red"/> (più di un periodo) |
Correggere gli attributi XAML con più di un punto. |
XML
Le righe di questa tabella descrivono i miglioramenti apportati alle funzionalità che in precedenza presentavano limitazioni o altri problemi.
Schemi e trasformazioni
Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Assembly: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Schemi camaleonte | Per evitare il danneggiamento dei dati, gli schemi camaleon vengono ora clonati correttamente quando vengono inclusi in più schemi. Gli schemi camaleon sono schemi che non hanno uno spazio dei nomi di destinazione e, quando sono inclusi in un altro XSD, accettano lo spazio dei nomi di destinazione dello schema di importazione. Vengono spesso usati per includere tipi comuni in uno schema. |
Funzioni ID | La funzione ID XSLT restituisce ora il valore corretto anziché Null quando un XmlReader oggetto viene passato a un xlst. Se l'utente ha creato un oggetto XmlReader da una classe LINQ to XML utilizzando il metodo CreateReader, e questo oggetto XmlReader è stato passato a un XSLT, qualsiasi istanza della funzione id in XSLT precedentemente restituiva null. Questo non è un valore restituito consentito per la id funzione. |
Attributo dello spazio dei nomi | Per evitare il danneggiamento dei dati, un XPathNavigator oggetto restituisce ora correttamente il nome locale dell'attributo x:xmlns . |
Dichiarazioni dello spazio dei nomi | Un XmlReader oggetto in un sottoalbero non crea più dichiarazioni di spazio dei nomi duplicate all'interno di un elemento XML. |
Convalida dello schema | Per evitare la convalida errata dello schema, la XmlSchemaSet classe consente la compilazione corretta e coerente degli schemi XSD. Questi schemi possono includere altri schemi; ad esempio, A.xsd può includere B.xsd , che può includere C.xsd . La compilazione di uno di questi elementi determina l'attraversamento di questo grafico delle dipendenze. |
Funzioni script | La funzione function-available non restituisce più false in modo errato quando la funzione è effettivamente disponibile. |
URI | Il Load metodo restituisce ora l'URI base corretto nelle query LINQ. |
Validazione
Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Assembly: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Risolutori dello spazio dei nomi | Il metodo ReadContentAs non ignora più il risolutore IXmlNamespaceResolver passato ad esso. Nelle versioni precedenti il sistema di risoluzione dello spazio dei nomi specificato è stato ignorato e l'oggetto XmlReader è stato usato. |
Spazi vuoti | Per evitare perdite di dati durante la creazione di un lettore, il Create metodo non elimina più spazi vuoti significativi. La convalida XML riconosce la modalità di contenuto misto, in cui il testo può essere combinato con il markup XML. In modalità mista, tutti gli spazi vuoti sono significativi e devono essere segnalati. |
Scrittura
Namespace: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
Assembly: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)
Caratteristica / Funzionalità | Differenze rispetto a 3.5 SP1 |
---|---|
Riferimenti alle entità | Per evitare il danneggiamento dei dati, i riferimenti alle entità non vengono più entità due volte negli attributi XML. Se l'utente ha tentato di scrivere un'entità in un attributo xmlns , xml:lang , oppure xml:space utilizzando il metodo WriteEntityRef, l'entità è stata entitizzata due volte nell'output, causando così la corruzione dei dati. |
Nuova gestione delle linee | Per evitare il danneggiamento dei dati, XmlWriter gli oggetti rispettano l'opzione NewLineHandling . |