Risicobeperking: Padnormalisatie
Vanaf apps die zich richten op .NET Framework 4.6.2, is de normalisatie van paden in .NET Framework gewijzigd.
Wat is padnormalisatie?
Het normaliseren van een pad omvat het wijzigen van de tekenreeks waarmee een pad of bestand wordt geïdentificeerd, zodat het overeenkomt met een geldig pad op het doelbesturingssysteem. Normalisatie omvat doorgaans:
Onderdeel- en mapscheidingstekens canoniseren.
De huidige map toepassen op een relatief pad.
Evalueer de relatieve map (
.
) of de bovenliggende map (..
) in een pad.Opgegeven tekens bijsnijden.
De wijzigingen
Vanaf apps die gericht zijn op .NET Framework 4.6.2, is de normalisatie van paden op de volgende manieren gewijzigd:
De runtime wordt uitgesteld tot de functie GetFullPathName van het besturingssysteem om paden te normaliseren.
Normalisatie omvat niet langer het bijsnijden van het einde van mapsegmenten (zoals een spatie aan het einde van een mapnaam).
Ondersteuning voor syntaxis van apparaatpaden in volledig vertrouwen, inclusief
\\.\
en voor I/O-API's van bestanden in mscorlib.dll,\\?\
.De runtime valideert geen paden voor apparaatsyntaxis.
Het gebruik van apparaatsyntaxis voor toegang tot alternatieve gegevensstromen wordt ondersteund.
Impact
Voor apps die zijn gericht op .NET Framework 4.6.2 of hoger, zijn deze wijzigingen standaard ingeschakeld. Ze moeten de prestaties verbeteren terwijl methoden toegang hebben tot eerder ontoegankelijke paden.
Apps die gericht zijn op .NET Framework 4.6.1 en eerdere versies, maar worden uitgevoerd onder .NET Framework 4.6.2 of hoger, worden niet beïnvloed door deze wijziging.
Oplossing
Apps die zijn gericht op .NET Framework 4.6.2 of hoger, kunnen zich afmelden voor deze wijziging en verouderde normalisatie gebruiken door het volgende toe te voegen aan de <runtimesectie> van het toepassingsconfiguratiebestand:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=true" />
</runtime>
Apps die zijn gericht op .NET Framework 4.6.1 of eerder, maar die worden uitgevoerd op .NET Framework 4.6.2 of hoger, kunnen de wijzigingen in padnormalisatie inschakelen door de volgende regel toe te voegen aan de <runtimesectie> van het .configuration-bestand van de toepassing:
<runtime>
<AppContextSwitchOverrides value="Switch.System.IO.UseLegacyPathHandling=false" />
</runtime>