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>