Bagikan melalui


Mitigasi: Normalisasi Jalur

Dimulai dengan aplikasi yang menargetkan .NET Framework 4.6.2, normalisasi jalur dalam .NET Framework telah berubah.

Apa itu normalisasi jalur?

Menormalkan jalur melibatkan modifikasi string yang mengidentifikasi jalur atau file sehingga sesuai dengan jalur yang valid pada sistem operasi target. Normalisasi biasanya melibatkan:

  • Kanonikalisasi komponen dan pemisah direktori.

  • Menerapkan direktori saat ini ke jalur relatif.

  • Mengevaluasi direktori relatif (.) atau direktori induk (..) dalam jalur.

  • Memangkas karakter yang ditentukan.

Perubahan

Dimulai dengan aplikasi yang menargetkan .NET Framework 4.6.2, normalisasi jalur telah berubah dengan cara berikut:

  • Runtime mengandalkan pada fungsi GetFullPathName dari sistem operasi untuk menormalkan jalur.

  • Normalisasi tidak lagi melibatkan pemangkasan akhir segmen direktori (seperti spasi di akhir nama direktori).

  • Dukungan untuk sintaks jalur perangkat dalam mode kepercayaan penuh (full trust), termasuk \\.\ dan, untuk API I/O file di mscorlib.dll, \\?\.

  • Runtime tidak memvalidasi jalur sintaks perangkat.

  • Penggunaan sintaks perangkat untuk mengakses aliran data alternatif didukung.

Dampak

Untuk aplikasi yang menargetkan .NET Framework 4.6.2 atau yang lebih baru, perubahan ini aktif secara default. Mereka harus meningkatkan performa sambil memungkinkan metode untuk mengakses jalur yang sebelumnya tidak dapat diakses.

Aplikasi yang menargetkan .NET Framework 4.6.1 dan versi yang lebih lama, tetapi berjalan di versi .NET Framework 4.6.2 atau versi yang lebih baru tidak terpengaruh oleh perubahan ini.

Mitigasi

Aplikasi yang menargetkan .NET Framework 4.6.2 atau yang lebih baru dapat menolak perubahan ini dan menggunakan normalisasi warisan dengan menambahkan yang berikut ke <bagian runtime> dari file konfigurasi aplikasi:

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

Aplikasi yang menargetkan .NET Framework 4.6.1 atau yang lebih lama tetapi berjalan pada .NET Framework 4.6.2 atau yang lebih baru dapat mengaktifkan perubahan pada normalisasi jalur dengan menambahkan baris berikut ke <bagian runtime> dari file .configuration aplikasi:

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

Lihat juga