Entschärfung: Pfadnormalisierung

Von Apps für die Zielplattform .NET Framework 4.6.2 an hat sich die Pfadnormalisierung in .NET Framework geändert.

Was ist Pfadnormalisierung?

Das Normalisieren eines Pfads beinhaltet das Verändern der Zeichenfolge, die einen Pfad oder eine Datei kennzeichnet, in einer Weise, dass sie einem gültigen Pfad im Zielbetriebssystem entspricht. Normalisierung umfasst ist in der Regel:

  • Die Kanonisierung von Komponenten- und Verzeichnistrennzeichen.

  • Die Anwendung des aktuellen Verzeichnisses auf einen relativen Pfad.

  • Die Auswertung des relativen Verzeichnisses (.) oder des übergeordneten Verzeichnisses (..) in einem Pfad.

  • Das Verkürzen um angegebene Zeichen.

Die Änderungen

Von Apps für die Zielplattform .NET Framework 4.6.2 an hat sich die Pfadnormalisierung in folgender Weise geändert:

  • Die Runtime greift auf die Funktion GetFullPathName des Betriebssystems zurück, um Pfade zu normalisieren.

  • Die Normalisierung beinhaltet nicht mehr das Verkürzen des Endes von Verzeichnissegmenten (etwa im Fall eines Leerzeichens am Ende eines Verzeichnisnamens).

  • Unterstützung für Gerätepfadsyntax mit vollem Vertrauen, einschließlich \\.\ und \\?\ für Datei-E/A-APIs in mscorlib.dll.

  • Die Runtime überprüft Gerätesyntaxpfade nicht.

  • Die Verwendung von Gerätesyntax für den Zugriff auf alternative Datenströme wird unterstützt.

Auswirkungen

Für Apps mit der Zielplattform .NET Framework 4.6.2 oder höher sind diese Änderungen standardmäßig aktiviert. Sie sollten die Leistung verbessern und Methoden zugleich den Zugriff auf zuvor nicht zugängliche Pfade ermöglichen.

Apps mit der Zielplattform .NET Framework 4.6.1 und früheren Versionen, die unter .NET Framework 4.6.2 oder höher ausgeführt werden, sind von dieser Änderung nicht betroffen.

Problemumgehung

Apps mit der Zielplattform .NET Framework 4.6.2 oder höher können sich gegen diese Änderung entscheiden und Legacynormalisierung verwenden, indem dem Abschnitt <runtime> der Anwendungskonfigurationsdatei Folgendes hinzugefügt wird:

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

Apps mit der Zielplattform .NET Framework 4.6.1 oder früher, die unter .NET Framework 4.6.2 oder höher ausgeführt werden, können die Änderungen an der Pfadnormalisierung verwenden, indem dem Abschnitt <runtime> der Anwendungskonfigurationsdatei die folgende Zeile hinzugefügt wird:

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

Siehe auch

Neuausrichtungsänderungen