
A partir do Visual Studio 2019 Preview 4 e RC, ajustaremos como as versões C # são tratadas nas ferramentas .NET. Leia mais abaixo <cut>.
Resumo das mudanças
Em primeiro lugar, estamos adicionando dois novos valores de versão de idioma ( LangVersion ): LatestMajor e Preview . Veja como eles se comparam à lista de valores atualmente suportados:
Langversion | Significado |
---|
LatestMajor | Última versão principal suportada do idioma C # |
Pré-visualização | Última visualização disponível Versão no idioma C # |
Mais recentes | Versão mais recente do idioma C # suportada (incluindo versão secundária) |
ISO-1 | C # 1.0 / 1.2 |
ISO-2 | C # 2.0 |
3 | C # 3.0 |
4 | C # 4.0 |
5 | C # 5.0 |
6 | C # 6.0 |
7 | C # 7.0 |
7.1 | C # 7.1 |
7.2 | C # 7.2 |
7.3 | C # 7.3 |
8.0 | C # 8.0 |
Quando nenhum LangVersion é especificado, o significado padrão agora é determinado pela estrutura de destino do seu projeto. Quando você direciona uma estrutura de visualização que também possui uma versão C # de visualização correspondente, essa versão é o padrão. Se você não segmentar uma estrutura de visualização, a opção Mais recente será escolhida.
Experiência quando o C # 8.0 está em visualização
Os cenários a seguir explicam como a versão C # padrão será interpretada enquanto o C # 8.0 ainda estiver na visualização.
Segmentação pela pré-visualização netcoreapp3.0 ou pré-visualização netstandard2.1
A versão do idioma padrão escolhida neste cenário é Visualização . Os recursos do C # 8.0 aos quais você tem acesso se baseiam inteiramente na versão do compilador (e, portanto, no .NET SDK) que você está usando. À medida que você usa visualizações futuras, você pode obter mais recursos (ou ligeiramente aprimorados). Quando você cria um projeto, o .NET SDK emitirá um aviso de que tudo isso ainda está na visualização.
Direcionando o .NET Framework
A versão do idioma padrão escolhida neste cenário é Mais recente . Qualquer uso de um recurso do C # 8.0 é um erro de compilação. As ferramentas do Visual Studio solicitarão uma correção rápida que pode alterar a versão do idioma do projeto ou solução quando um desses erros for encontrado. Como alguns recursos exigem tipos subjacentes ou recursos de tempo de execução que não estão disponíveis no .NET Framework, como Membros da Interface Padrão, você ainda pode receber um erro para esses recursos ao direcionar o .NET Framework.
Visualização multi-target netcoreapp3.0 ou netstandard2.1 preview e .NET Framework
Para os destinos de visualização netcoreapp3.0 / netstandard2.1 , a versão do idioma é Visualização . Um aviso é emitido na compilação a partir do .NET SDK. Para o destino do .NET Framework, a versão do idioma é Mais Recente .
LangVersion explícito é usado
Se você definir explicitamente um valor de LangVersion, isso será respeitado e o comportamento padrão mencionado anteriormente será ignorado.
Experiência quando C # 8.0 e .NET Core 3.0 são GA
Eventualmente, o C # 8.0 e o .NET Core 3.0 serão lançados em uma versão com qualidade GA. Aqui está o que os valores relevantes de LangVersion serão mapeados naquele momento:
Langversion | Significado |
---|
Mais recentes | 8.0 |
LatestMajor | 8.0 |
Pré-visualização | Ainda não determinado |
Projetos que não especificam uma LangVersion serão tratados como se fossem mais recentes quando o C # 8.0 for GA.
Se você criou um projeto para a visualização C # 8.0 visando a visualização do .NET Core 3.0 ou a visualização do .NET Standard 2.1 e também não especificou uma LangVersion, será como se a opção Mais recente fosse escolhida. Você não ativará a Visualização em nenhum cenário, uma vez que o C # 8.0 e o .NET Core 3.0 sejam GA.
No momento da redação deste documento, não há plano para uma visualização do C # quando o C # 8.0 é GA. Eventualmente, uma visualização será enviada e teremos uma postagem no blog explicando.
Fundamentação
Até esse momento, a versão C # padrão usada no Visual Studio era equivalente a LatestMajor . Isso tem sido problemático por dois motivos:
- O C # agora evolui entre os ciclos de lançamento do Visual Studio, mas os novos projetos no Visual Studio ainda seriam padronizados para uma versão mais antiga do C #.
- A visualização C # 8.0 é a melhor opção para projetos que visam a visualização do .NET Core 3.0, mas não havia como torná-la padrão sem torná-la padrão para projetos que não estavam direcionados à visualização do .NET Core 3.0.
De maneira mais geral, à medida que evoluímos o C # e continuamos a liberar mais recursos alinhados com uma versão futura do .NET Core, queremos garantir que você possa usar esses recursos da maneira mais integrada possível. Isso também permite que você use os recursos no início do ciclo de vida de desenvolvimento, aumentando a janela de tempo em que o feedback acionável sobre um recurso pode influenciar seu design.
Suporte e compatibilidade para recursos de visualização
A maneira de pensar sobre o suporte também é um pouco diferente. Para permitir o uso dos recursos de visualização do C # 8.0 em um Visual Studio 2019 lançado, as preocupações de suporte e compatibilidade são diferenciadas pela visualização vs. recursos lançados:
- Qualquer recurso ou comportamento do C # 7.3 e inferior é totalmente suportado e totalmente compatível. Nenhuma mudança do que existe atualmente hoje.
- Qualquer recurso de visualização do C # 8.0 não é suportado.
- Não há garantia de compatibilidade de uma visualização do C # 8.0 para outra.
Em resumo, se você usar a visualização do C # 8.0 no Visual Studio 2019, alguns recursos e comportamentos poderão mudar entre agora e quando o C # 8.0 for totalmente lançado.
Feliz hacking!