Omezení rizik: Normalizace cest

Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.6.2, se normalizace cest v rozhraní .NET Framework změnila.

Co je normalizace cesty?

Normalizace cesty zahrnuje úpravu řetězce, který identifikuje cestu nebo soubor tak, aby odpovídal platné cestě v cílovém operačním systému. Normalizace obvykle zahrnuje:

  • Canonicalizing component and directory separators.

  • Použití aktuálního adresáře na relativní cestu

  • Vyhodnocení relativního adresáře (.) nebo nadřazeného adresáře (..) v cestě

  • Oříznutí zadaných znaků

Změny

Počínaje aplikacemi, které cílí na rozhraní .NET Framework 4.6.2, se normalizace cest změnila následujícími způsoby:

  • Modul runtime vzdoruje funkci GetFullPathName operačního systému za účelem normalizace cest.

  • Normalizace už nezahrnuje oříznutí konce segmentů adresáře (například mezeru na konci názvu adresáře).

  • Podpora syntaxe cesty zařízení v plném vztahu důvěryhodnosti, včetně \\.\ a pro rozhraní API vstupně-výstupních operací souborů v mscorlib.dll, \\?\.

  • Modul runtime neověřuje cesty syntaxe zařízení.

  • Podporuje se použití syntaxe zařízení pro přístup k alternativním datovým proudům.

Dopad

U aplikací, které cílí na rozhraní .NET Framework 4.6.2 nebo novější, jsou tyto změny ve výchozím nastavení zapnuté. Měly by zlepšit výkon a zároveň umožnit metodám přístup k dříve nepřístupným cestám.

Tyto změny neovlivní aplikace, které cílí na rozhraní .NET Framework 4.6.1 a starší verze, ale jsou spuštěné v rozhraní .NET Framework 4.6.2 nebo novější.

Zmírnění

Aplikace, které cílí na rozhraní .NET Framework 4.6.2 nebo novější, se můžou odhlásit z této změny a používat starší normalizaci přidáním následujícího kódu do <oddílu runtime> konfiguračního souboru aplikace:

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

Aplikace, které cílí na rozhraní .NET Framework 4.6.1 nebo starší, ale jsou spuštěné v rozhraní .NET Framework 4.6.2 nebo novější, můžou povolit změny normalizace cest přidáním následujícího řádku do <oddílu runtime> souboru .configuration aplikace:

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

Viz také