Qual versão do C # estou usando

191

Quero descobrir qual versão do C # estou usando. Se eu estivesse usando python, faria algo como python -Vna linha de comando ou digite:

import sys
print sys.version

Em PHP, eu faria algo assim: phpinfo();em java:java -version

Mas não consegui descobrir como conseguir isso em c #.

Esta pergunta não responde, embora o nome sugira que deveria.

Entendi que depende da estrutura .NET, mas existe uma maneira programática de descobrir minha estrutura? Quero dizer, sem ir ao diretório e verificar o nome das minhas pastas .NET.

Salvador Dalí
fonte
5
Este é de John Skeet mais votados questão
Avi Turner
5
no Visual Studio: Propriedades do projeto> Construção> Avançado ...> Versão da linguagem: codeproject.com/Tips/865579/...
Slai

Respostas:

65

Para obter a versão do framework - veja a versão de uma das Assembléias principais, isto é,

 Console.Write(typeof(string).Assembly.ImageRuntimeVersion);

Obter a versão do compilador C # é um pouco mais difícil, mas você deve conseguir adivinhar a versão verificando qual versão do framework é usada.

Se você estiver usando o compilador de linha de comando (csc.exe), poderá verificar a ajuda para ver a versão (também precisará saber a versão do Framework de qualquer maneira:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Alexei Levenkov
fonte
22
Infelizmente Assembly.ImageRuntimeVersion não lhe diz o número da versão direita - no meu PC, .NET 4.6 RC está instalado, mas Assembly.ImageRuntimeVersion relata v4.0.30319
Matt
1
A menos que você esteja usando o C # 6, que não analisa a versão do .NET.
Michael Puckett II
2
RE: Comentário de Matt: Só porque você tem uma versão do .NET instalada no seu PC, isso não significa que seja a versão em uso no seu projeto
LoJo 26/17
@ LoJo - Você está absolutamente certo. Um motivo é que o Visual Studio permite a segmentação múltipla (ou seja, você pode selecionar a versão do .NET Target Framework nas propriedades do projeto), o outro motivo é que as versões mais recentes do Roslyn precisam ser adicionadas via NUGET ao seu projeto. Terceiro, como escrevi aqui , o csc.exe está limitado à versão 5.0 e não pode ser usado para detectar versões superiores do C #.
Matt
3
Ninguém mencionou ainda que a instrução correta para obter a lista de versões suportadas pelo seu compilador Roslyn é "C: \ Arquivos de Programas (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe" / langversion :?
David A. Gray
231

Depende do .NET Frameworkque você usa. Verifique a resposta de Jon Skeet sobre versões.

Aqui está a versão curta de sua resposta.

C # 1.0 lançado com o .NET 1.0

C # 1.2 (estranhamente); lançado com o .NET 1.1

C # 2.0 lançado com o .NET 2.0

C # 3.0 lançado com o .NET 3.5

C # 4.0 lançado com o .NET 4

C # 5.0 lançado com o .NET 4.5

C # 6.0 lançado com o .NET 4.6

O C # 7.0 é lançado com o .NET 4.6.2

O C # 7.3 é lançado com o .NET 4.7.2

C # 8.0 é lançado com o NET Core 3.0

Praveen
fonte
13
... e o C # 6.0 é lançado com o .NET 4.6
Matt
4
Apenas um alerta; O C # 6 usa um compilador diferente (Roslyn) e compila o código-fonte para outras versões do .NET, não apenas o .NET 4.6.
Michael Puckett II
6
... e o C # 7.0 é lançado com o .NET 4.6.2
Jivan 04/04
12
Mas você pode compilar o .NET 2.0 com o compilador C # 7.0. Verificar a versão do .NET é uma dedução muito limitada e fornece apenas uma resposta provável.
Abel
5
Deixe-me adicionar ao comentário de @ Abel que este link mostra como você pode alterar a versão da linguagem C # (quase) independentemente da estrutura. Portanto, você só pode deduzir dos erros de sintaxe que o código pressupõe uma versão mais recente do C # do que você pode ter selecionado nas propriedades.
Matt
87

Embora isso não responda diretamente à sua pergunta, estou colocando isso aqui, pois o Google trouxe esta página primeiro em minhas pesquisas quando procurava essas informações.

Se você estiver usando o Visual Studio , poderá clicar com o botão direito do mouse em seu projeto -> Propriedades -> Compilar -> Avançado. Isso deve listar as versões disponíveis e a que o seu proj está usando.

insira a descrição da imagem aqui

Darth
fonte
6
Qual versão tenho se no menu suspenso eu vir o Automatically selected based on framework versione não puder selecionar nada no menu suspenso (ele está desativado)? Estou usando o VS 2019.
hellouworld 17/01
@hellouworld Clique no link Por que não consigo selecionar um link diferente da versão em C # e a página da Web fornecerá a referência ... volte para a guia Aplicativo e veja qual estrutura de destino você selecionou.
Johnny Wu
8

Versão .NET através do Registro

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ explore os filhos e examine cada versão. Aquele com a tecla 'Full' é a versão no sistema.

https://support.microsoft.com/en-us/kb/318785 https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx

Versão .NET através do Visual Studio

Ajuda -> Sobre o Microsoft Visual Studio -> A versão do .NET é especificada no canto superior direito.

Pelo que entendi, o Visual Studio usa o .NET Framework no SO.

A versão de destino do .NET Framework de um projeto no Visual Studio pode ser modificada com Propriedades do projeto -> Aplicativo -> Target Framework

Através da dll

Se você conhece o diretório .NET Framework, por exemplo, C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Abra System.dll, clique com o botão direito do mouse -> Propriedades -> guia Detalhes

Versão c #

Ajuda -> Sobre o Microsoft Visual Studio

Nas listas de produtos instaladas, há Visual C #. No meu caso, Visual C # 2015

O Visual Studio (Microsoft) envia C # pelo nome Visual C #.

https://msdn.microsoft.com/en-us/library/hh156499.aspx

C # 6, Visual Studio .NET 2015 Versão atual, veja abaixo

Amod Pandey
fonte
7

A versão C # que você está usando depende totalmente da versão .Net que você está usando.

se você estiver usando o visual studio para desenvolvimento, poderá escolher a versão da estrutura .net, a versão em c # associada a ela

Estas são as versões do C # conhecidas:

  • C # 1.0 lançado com .NET 1.0 e VS2002 (janeiro de 2002)
  • C # 1.2 (estranhamente); lançado com .NET 1.1 e VS2003 (abril de 2003). Primeira versão a chamada Disposeno IEnumerators quais implementadas IDisposable. Alguns outros pequenos recursos.
  • C # 2.0 lançado com o .NET 2.0 e o VS2005 (novembro de 2005). Principais novos recursos: genéricos, métodos anônimos, tipos anuláveis, blocos de iteradores
  • C # 3.0 lançado com o .NET 3.5 e o VS2008 (novembro de 2007). Principais novos recursos: expressões lambda, métodos de extensão, árvores de expressão, tipos anônimos, digitação implícita ( var), expressões de consulta
  • C # 4.0 lançado com o .NET 4 e o VS2010 (abril de 2010). Principais novos recursos: ligação tardia ( dynamic), delegação e variação genérica da interface, mais suporte a COM, argumentos nomeados e parâmetros opcionais
  • C # 5.0 lançado com o .NET 4.5 em agosto de 2012.

Refrence de Jon Skeet C # versões Resposta

Vinay Pratap Singh
fonte
Você pode usar alguns recursos do C # 3.0 no .NET 2.0, portanto, não é realmente um mapeamento 1-1.
Nefarel 04/11
13
Isso está errado - não depende da versão do .NET, depende do compilador.
MarkMnl
isso está completamente errado. Meu projeto atual está definido como .NET 4.0 e ainda assim posso usar os recursos do C # 7.0. Mas depois que eu envio para remoto, o sistema CI / CD falha ao criar porque usa o C # versão 5 ou 6
phuclv
Isso não é verdade desde C # 6.0
asaf92 18/12/19
6

Por padrão, a seguir estão a versão correspondente dos compiladores C # para o Visual Studio:

  1. Visual Studio 2015: C # 6.0
  2. Visual Studio 2013: C # 5.0
  3. Visual Studio 2012: C # 5.0
  4. Visual Studio 2010: C # 4.0
  5. Visual Studio 2008: C # 3.0
  6. Visual Studio 2005: C # 2.0
  7. Visual Studio.NET 2003: C # 1.2
  8. Visual Studio.NET 2002: C # 1.0

Você também pode modificar a versão, siga as etapas abaixo.

Abra a janela de propriedades do projeto:

step 1. Right click on the Project Name
step 2. Select "Properties" (last option in menu)
step 3. Select "Build" from left hand side options and scroll till down
step 4. click on "Advance" button.
step 5. It will open a popup and there you will get "Language Version" dropdown
step 6. Select desired version of C# and Click "OK"
Ankit Mori
fonte
5

No prompt de comando do desenvolvedor, digite

csc -langversion:?

Isso exibirá todas as versões de C # suportadas, incluindo o padrão:

1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)
fortesl
fonte
5

Graças a @fortesl e esta resposta

Estou usando o VS 2019 e não informa com facilidade a versão C # que você está usando. Estou trabalhando com o .Net Core 3.0 e o VS 2019 usando o C # 8 nesse ambiente. Mas "csc -langversion :?" deixa isso claro:

D:\>csc -langversion:?
Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0 (default)
latestmajor
preview
latest

Não tenho certeza do que csc -version está identificando:

D:\>csc --version
Microsoft (R) Visual C# Compiler version 3.4.0-beta1-19462-14 (2f21c63b)
Copyright (C) Microsoft Corporation. All rights reserved.
guyr
fonte
Looks como OP precisa de uma codificação relacionados resposta
bradbury9
4

Se você estiver usando o VS2015, siga as etapas abaixo para descobrir o mesmo:

  1. Clique com o botão direito do mouse no projeto.
  2. Clique na guia Propriedades .
  3. Na janela de propriedades, selecione Construir opção .
  4. Nesse clique no botão Avançar botão .
  5. Lá você descobrirá a versão do idioma.

As imagens abaixo mostram as etapas para o mesmo:

Passo 1:

Passo 1

Passo 2:

Passo 2

Sunil Jadhav
fonte
3

Para ver a versão do compilador instalada do VC #:

Abra o prompt de comando do Visual Studio, digite csc e pressione Enter.

Você verá algo como o seguinte:

Microsoft® Visual C # Compiler versão 4.0.30319.34209

para Microsoft .NET Framework 4.5

Copyright (C) Microsoft Corporation. Todos os direitos reservados.

PS: " CSC " significa " C Sharp Compiler ". Na verdade, usando esse comando, você executa o csc.exe, que é um arquivo executável localizado em "c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX". Para mais informações sobre o CSC, visite http://www.file.net/process/csc.exe.html

Siyavash Hamdi
fonte
3

No Windows, execute o dev na linha de programa de comando / pesquisa e selecione Prompt de Comando do Desenvolvedor para VS. Então você vai apenas correr

csc

Agora você obtém informações semelhantes a

Microsoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Copyright (C) Microsoft Corporation. All rights reserved.   

Para Windows e se você iniciar com o cmd terminal

cd C:\Windows\Microsoft.NET\Framework\
dir

Agora você vê todos os diretórios e arquivos em .NET \ Framework \ Please, selecione v ... latest e vá lá, por exemplo,

cd v4.0.30319

Corre

csc

Você verá informações sobre a versão do compilador C #, que podem ser algo semelhante a

Microsoft (R) Visual C# Compiler version 4.7.2556.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.
romano
fonte
1

A versão do idioma é escolhida com base na estrutura de destino do projeto, por padrão.

Cada projeto pode usar uma versão diferente da estrutura .Net, o melhor compilador C # adequado será escolhido por padrão, observando a estrutura de destino. No visual studio, a interface do usuário não permitirá que os usuários alterem a versão do idioma; no entanto, podemos alterar a versão do idioma editando o arquivo do projeto com a adição de um novo grupo de propriedades. Mas isso pode causar problemas de tempo de compilação / execução no código existente.

<PropertyGroup>  
<LangVersion>8.0</LangVersion>  
</PropertyGroup>

Eu pude ver o seguinte nos documentos da Microsoft.

O compilador determina um padrão com base nestas regras:

Target framework  version     C# language version default
.NET Core           3.x         C# 8.0
.NET Core           2.x         C# 7.3
.NET Standard       2.1         C# 8.0
.NET Standard       2.0         C# 7.3
.NET Standard       1.x         C# 7.3
.NET Framework      all         C# 7.3
Sreekanth
fonte
0

Aqui está uma visão geral de como a estrutura do .NET e as versões do compilador estão relacionadas, definidas e modificadas. Cada projeto possui uma (s) versão (s) da estrutura .NET de destino, por exemplo, versão 3.x ou 2.x. A estrutura .NET contém os tipos e componentes de tempo de execução.

A instalação da versão do Visual Studio e a versão do .NET framework determinam a versão da linguagem c # compatível e as opções do compilador que podem ser usadas. A versão c # padrão e as opções usadas em um projeto do Visual Studio são a versão mais recente do idioma instalada, compatível com a versão do .NET framework que está sendo usada.

Para exibir ou atualizar a linguagem Framework ou C # em um projeto no Visual Studio 2011:

  • clique com o botão direito do mouse no projeto no Solution Explorer e selecione Propriedades
  • selecione 'Aplicativo' no painel de navegação esquerdo. Em estrutura de destino: é a versão da estrutura do .NET. Selecione a seta para baixo para ver todas as versões disponíveis da estrutura.

  • selecione 'Compilar' no painel de navegação esquerdo. Na seção 'Geral' do painel ao lado de 'Versão do idioma:' está sendo usada a versão do idioma do compilador c #, por exemplo 'padrão' ou c # 5.0

  • selecione a seta para baixo no menu suspenso 'Versão do idioma: "para ver todas as versões disponíveis do idioma. Se' padrão 'for a versão c # usada, a versão mais recente do idioma compatível será usada.

Para ver a versão exata do idioma do compilador para 'padrão', digite o seguinte no prompt de comando do desenvolvedor para a sua versão instalada do Visual Studio. Por exemplo, no ícone Iniciar do Windows, selecione o ícone: "Prompt de Comando do Desenvolvedor para VS2011 'e digite:

csc -langversion: Padrão

Microsoft (R) Visual C # Compiler versão 4.7.3062.0 para c # 5

edW
fonte
0

Para obter a versão C # do código, use esse código da documentação da Microsoft para obter a versão do .NET Framework e faça a correspondência usando a tabela mencionada por todos os outros. Você pode codificar o mapa de versão do Framework para C # em um dicionário ou algo para que sua função retorne a versão de C #. Funciona se você tiver o .NET Framework> = 4.5.

using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

      using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
      {
        if (ndpKey != null && ndpKey.GetValue("Release") != null) {
            Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
        }
         else {
            Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
         } 
      }

      // Checking the version using >= enables forward compatibility.
      string CheckFor45PlusVersion(int releaseKey)
      {
         if (releaseKey >= 528040)
            return "4.8 or later";
         if (releaseKey >= 461808)
            return "4.7.2";
         if (releaseKey >= 461308)
            return "4.7.1";
         if (releaseKey >= 460798)
            return "4.7";
         if (releaseKey >= 394802)
            return "4.6.2";
         if (releaseKey >= 394254)
            return "4.6.1";      
         if (releaseKey >= 393295)
            return "4.6";      
         if (releaseKey >= 379893)
            return "4.5.2";      
         if (releaseKey >= 378675)
            return "4.5.1";      
         if (releaseKey >= 378389)
            return "4.5";      
         // This code should never execute. A non-null release key should mean
         // that 4.5 or later is installed.
         return "No 4.5 or later version detected";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1
Stack Underflow
fonte