Mapeamento de barra invertida em caminhos de arquivo Unix
Os caracteres Backslash (\
) são válidos em nomes de diretórios e arquivos no Unix. A partir do .NET 8, o tempo de execução nativo do CoreCLR não converte \
mais caracteres em separadores de diretório — barras/
() — no Unix. Essa alteração permite que os aplicativos .NET sejam localizados em caminhos com nomes que contêm caracteres de barra invertida. Ele também permite que o tempo de execução nativo, dotnet
o host e as ilasm
ferramentas e ildasm
acessem arquivos em caminhos que contêm caracteres de barra invertida.
Comportamento anterior
O tempo de execução nativo do CoreCLR converteu automaticamente caracteres de barra invertida (\
) em caminhos de arquivo para adiantar barras (/
) no Unix.
Novo comportamento
O tempo de execução nativo do CoreCLR não converte nenhum caractere de caminho de arquivo no Unix.
Versão introduzida
.NET 8 Visualização 1
Tipo de mudança de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
Sem essa alteração, os aplicativos .NET localizados em diretórios que contêm caracteres de barra invertida falham ao iniciar.
Ação recomendada
- Use Path.DirectorySeparatorChar como um separador de diretório em seu aplicativo em vez de codificá-lo para
\
ou/
. - Use
/
como um separador de diretório no Unix em caminhos de arquivo que você passa para odotnet
host, APIs deildasm
hospedagem eilasm
ferramentas. - Use
/
como um separador de diretório no Unix em caminhos de arquivo em váriasDOTNET_xxx
variáveis de ambiente.
APIs afetadas
- APIs de hospedagem
- System.Runtime.InteropServices.DllImportAttribute.Value
- System.Runtime.InteropServices.NativeLibrary.Load
- System.Runtime.InteropServices.NativeLibrary.TryLoad
- System.Reflection.Assembly.LoadFrom
- System.Reflection.Assembly.LoadFile
- System.Reflection.Assembly.UnsafeLoadFrom(String)
- System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyPath(String)
- System.Runtime.Loader.AssemblyLoadContext.LoadFromNativeImagePath(String, String)
- System.Runtime.Loader.AssemblyLoadContext.LoadUnmanagedDllFromPath(String)