Entschärfung: Pfadnormalisierung

Bei Apps, die für .NET Framework 4.6.2 oder höher entwickelt wurden, ergeben sich Änderungen bei der Pfadnormalisierung im .NET Framework.

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

Ab Apps, die gezielt .NET Framework 4.6.2 verwenden, ändert sich die Pfadnormalisierung wie folgt:

  • 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, die auf .NET Framework 4.6.2 oder eine höhere Version abzielen, 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.

Minderung

Für Apps, die auf .NET Framework 4.6.2 oder eine höhere Version abzielen, können diese Änderung deaktivieren und die Legacynormalisierung verwendet werden. Hierzu muss im Abschnitt <runtime> der Anwendungskonfigurationsdatei Folgendes hinzugefügt werden:

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

Für Apps, die auf .NET Framework 4.6.1 oder eine niedrigere Version abzielen, aber unter .NET Framework 4.6.2 oder einer höheren Version ausgeführt werden, können die Änderungen an der Pfadnormalisierung aktiviert werden, indem im Abschnitt <runtime> der Anwendungskonfigurationsdatei die folgende Zeile hinzugefügt wird:

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

Siehe auch