Compartilhar 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 significativas listadas neste artigo podem afetar seu aplicativo.

Bibliotecas principais do .NET

As APIs de diretórios não geram uma exceção para caracteres inválidos

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.

Descrição da alteração

No .NET Framework e no .NET Core 1.0 – 2.0, os métodos listados na seção APIs afetadas geram um ArgumentException se o argumento de 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 geram uma exceção se um caractere inválido é encontrado.

Motivo da alteração

A validação agressiva de caracteres de caminho bloqueia alguns cenários multiplataforma. Essa alteração foi introduzida para que o .NET não tente replicar ou prever o resultado das chamadas à API do sistema operacional. Para obter mais informações, consulte a postagem do blog "Prévia do System.IO no .NET Core 2.1".

Versão introduzida

.NET Core 2.1

Se seu código dependesse dessas APIs para verificar se há caracteres inválidos, você pode adicionar uma chamada a Path.GetInvalidPathChars.

APIs afetadas

Consulte também


Campos privados adicionados a tipos de struct internos

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

Descrição da alteração

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

Por exemplo, o código C# a seguir é compilado 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 do compilador: CS0165 – Uso da variável local não atribuída 'key'

Versão introduzida

2.1

Crie instâncias de tipos de struct usando o operador new ou o literal padrã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

Bibliotecas principais do .NET

APIs afetadas


Versões do OpenSSL no macOS

O .NET Core 3.0 e os runtimes posteriores no macOS agora preferem versões do OpenSSL 1.1.x às versões do OpenSSL 1.0.x para os tipos AesCcm, AesGcm, DSAOpenSsl, ECDiffieHellmanOpenSsl, ECDsaOpenSsl, RSAOpenSsl e SafeEvpPKeyHandle.

O runtime do .NET Core 2.1 agora dá suporte a versões do OpenSSL 1.1.x, mas ainda prefere versões do OpenSSL 1.0.x.

Descrição da alteração

Anteriormente, o runtime 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, agora está sem suporte. Para manter tipos que usam OpenSSL em versões com suporte do OpenSSL, o .NET Core 3.0 e os runtimes posteriores agora usam versões mais recentes do OpenSSL no macOS.

Com essa alteração, o comportamento dos runtimes do .NET Core no macOS é o seguinte:

  • O .NET Core 3.0 e os runtimes de versão posterior usam o OpenSSL 1.1.x, se disponível, e retornam ao 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 do OpenSSL com P/Invokes personalizados, siga as diretrizes nas observações de SafeEvpPKeyHandle.OpenSslVersion. Seu aplicativo poderá falhar se você não verificar o OpenSslVersion valor.

  • O runtime 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 runtime 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 OpenSSL não pode ser determinada de forma confiável no tempo de execução.

Versão introduzida

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

Categoria

Bibliotecas principais do .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 referenciar essas ferramentas do projeto.

Descrição da alteração

No ambiente do .NET Core 2.0, os projetos fazem referência a ferramentas externas do .NET na configuração de projeto <DotNetCliToolReference>. No .NET Core 2.1, algumas dessas ferramentas sã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.

Agora, as ferramentas estão incluídas no SDK do .NET Core 2.1:

Valor de <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

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

Categoria

MSBuild

APIs afetadas

Não aplicável


Consulte também