Ler em inglês

Partilhar via


Alterações significativas no .NET Core 2.1

Se você estiver migrando para a versão 2.1 do .NET Core, as alterações recentes listadas neste artigo podem afetar seu aplicativo.

Principais bibliotecas .NET

As APIs de caminho não lançam uma exceção para caracteres inválidos

As APIs que envolvem caminhos de arquivo não validam mais caracteres de caminho ou lançam um ArgumentException se um caractere inválido for encontrado.

Alterar a descrição

No .NET Framework e no .NET Core 1.0 - 2.0, os métodos listados na seção APIs afetadas lançam um ArgumentException argumento se o caminho contiver um caractere de caminho inválido. A partir do .NET Core 2.1, esses métodos não verificam mais se há caracteres de caminho inválidos ou lançam uma exceção se um caractere inválido for encontrado.

Razão para a alteração

A validação agressiva de caracteres de caminho bloqueia alguns cenários entre plataformas. Essa alteração foi introduzida para que o .NET não tente replicar ou prever o resultado de chamadas de API do sistema operacional. Para obter mais informações, consulte o System.IO na postagem do blog de espiada do .NET Core 2.1.

Versão introduzida

.NET Core 2.1

Se o seu código dependia dessas APIs para verificar se havia caracteres inválidos, você pode adicionar uma chamada ao Path.GetInvalidPathChars.

APIs afetadas

Consulte também


Campos privados adicionados a tipos de estrutura incorporados

Campos privados foram adicionados a certos tipos de struct em assemblies de referência. Como resultado, em C#, esses tipos struct sempre devem ser instanciados usando o novo operador ou literal padrão.

Alterar a descrição

No .NET Core 2.0 e versões anteriores, alguns tipos de struct fornecidos, por exemplo, ConsoleKeyInfo, podiam ser instanciados sem usar o new operador ou literal padrão em C#. Isso ocorreu porque os assemblies de referência usados pelo compilador C# não continham os campos privados para as structs. Todos os campos privados para tipos struct do .NET são adicionados aos assemblies de referência a partir do .NET Core 2.1.

Por exemplo, o seguinte código C# compila no .NET Core 2.0, mas não no .NET Core 2.1:

ConsoleKeyInfo key;    // Struct type

if (key.ToString() == "y")
{
    Console.WriteLine("Yes!");
}

No .NET Core 2.1, o código anterior resulta no seguinte erro de compilador: CS0165 - Uso da variável local não atribuída 'chave'

Versão introduzida

2.1

Ação recomendada

Instancie tipos struct usando o operador ou literal newpadrão.

Por exemplo:

ConsoleKeyInfo key = new ConsoleKeyInfo();    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");
ConsoleKeyInfo key = default;    // Struct type.

if (key.ToString() == "y")
    Console.WriteLine("Yes!");

Categoria

Principais bibliotecas .NET

APIs afetadas


Versões OpenSSL no macOS

Os tempos de execução do .NET Core 3.0 e posteriores no macOS agora preferem as versões do OpenSSL 1.1.x às versões do OpenSSL 1.0.x para os AesCcmtipos , AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSslRSAOpenSsl, , e SafeEvpPKeyHandle .

O tempo de execução do .NET Core 2.1 agora suporta versões do OpenSSL 1.1.x, mas ainda prefere as versões do OpenSSL 1.0.x.

Alterar a descrição

Anteriormente, o tempo de execução do .NET Core usava versões do OpenSSL 1.0.x no macOS para tipos que interagem com o OpenSSL. A versão mais recente do OpenSSL 1.0.x, OpenSSL 1.0.2, está agora fora de suporte. Para manter os tipos que usam OpenSSL em versões suportadas do OpenSSL, os tempos de execução do .NET Core 3.0 e posteriores agora usam versões mais recentes do OpenSSL no macOS.

Com essa alteração, o comportamento para os tempos de execução do .NET Core no macOS é o seguinte:

  • Os tempos de execução do .NET Core 3.0 e versões posteriores usam o OpenSSL 1.1.x, se disponível, e voltam para o OpenSSL 1.0.x somente se não houver nenhuma versão 1.1.x disponível.

    Para chamadores que usam os tipos de interoperabilidade OpenSSL com P/Invokes personalizados, siga as SafeEvpPKeyHandle.OpenSslVersion orientações nas observações. Seu aplicativo pode falhar se você não verificar o OpenSslVersion valor.

  • O tempo de execução do .NET Core 2.1 usa o OpenSSL 1.0.x, se disponível, e retorna ao OpenSSL 1.1.x se não houver nenhuma versão 1.0.x disponível.

    O tempo de execução 2.1 prefere a versão anterior do OpenSSL porque a SafeEvpPKeyHandle.OpenSslVersion propriedade não existe no .NET Core 2.1, portanto, a versão do OpenSSL não pode ser determinada de forma confiável em tempo de execução.

Versão introduzida

  • .NET Core 2.1.16
  • .NET Core 3.0.3
  • .NET Core 3.1.2

Ação recomendada

Categoria

Principais bibliotecas .NET

APIs afetadas


MSBuild

Ferramentas de projeto agora incluídas no SDK

O SDK do .NET Core 2.1 agora inclui ferramentas comuns da CLI, e você não precisa mais fazer referência a essas ferramentas do projeto.

Alterar a descrição

No .NET Core 2.0, os projetos fazem referência a ferramentas externas do .NET com a configuração do <DotNetCliToolReference> projeto. No .NET Core 2.1, algumas dessas ferramentas estão incluídas no SDK do .NET Core e a configuração não é mais necessária. Se você incluir referências a essas ferramentas em seu projeto, receberá um erro semelhante ao seguinte: A ferramenta 'Microsoft.EntityFrameworkCore.Tools.DotNet' agora está incluída no SDK do .NET Core.

Ferramentas agora incluídas no SDK do .NET Core 2.1:

<Valor DotNetCliToolReference> Ferramenta
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet DOTNET-EF

Versão introduzida

SDK do .NET Core 2.1.300

Ação recomendada

Remova a <DotNetCliToolReference> configuração do seu projeto.

Categoria

MSBuild

APIs afetadas

N/A


Consulte também