Migrazione: Normalizzazione del percorso

A partire dalle applicazioni destinate a .NET Framework 4.6.2, la normalizzazione del percorso in .NET Framework è stata modificata.

Che cos'è la normalizzazione di un percorso?

La normalizzazione di un percorso include la modifica della stringa che identifica un file o il percorso in modo che sia conforme a un percorso valido sul sistema operativo di destinazione. In genere, la normalizzazione implica:

  • La conversione in forma canonica dei separatori di directory e dei componenti.

  • L'applicazione della directory corrente in un percorso relativo.

  • La valutazione della directory relativa (.) o della directory padre (..) in un percorso.

  • La rimozione di caratteri specificati.

Le modifiche

A partire dalle applicazioni destinate a .NET Framework 4.6.2, la normalizzazione del percorso è stata modificata come segue:

  • Il runtime viene rinviato alla funzione GetFullPathName del sistema operativo per normalizzare i percorsi.

  • La normalizzazione non consiste più nel rimuovere la fine dei segmenti di directory (ad esempio uno spazio alla fine di un nome di directory).

  • Supporto per la sintassi del percorso dispositivo in attendibilità totale, tra cui \\.\ e, per le API del file I/O in mscorlib.dll, \\?\.

  • Il runtime non convalida i percorsi di sintassi del dispositivo.

  • È supportato l'uso della sintassi del dispositivo per accedere ai flussi di dati alternativi.

Impatto

Per le applicazioni destinate a .NET Framework 4.6.2 o versioni successive, queste modifiche sono applicate per impostazione predefinita. Tali modifiche migliorano le prestazioni, consentendo al contempo ai metodi di accedere ai percorsi in precedenza inaccessibili.

Le applicazioni destinate a .NET Framework 4.6.1 e versioni precedenti ma in esecuzione in .NET Framework 4.6.2 o versioni successive non sono interessate da questa modifica.

Mitigazione

Le app destinate a .NET Framework 4.6.2 o versioni successive possono rifiutare esplicitamente questa modifica e usare la normalizzazione legacy aggiungendo il codice seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>  

Le app destinate a .NET Framework 4.6.1 o versioni precedenti ma in esecuzione su .NET Framework 4.6.2 o versioni successive possono abilitare le modifiche alla normalizzazione del percorso aggiungendo la riga seguente alla sezione <runtime> del file di configurazione dell'applicazione:

<runtime>  
    <AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>  

Vedi anche