¿Qué versión de C # estoy usando?

191

Quiero saber qué versión de C # estoy usando. Si estuviera usando Python, haría algo como python -Vdesde la línea de comando, o escribiría:

import sys
print sys.version

En PHP haría algo como esto: phpinfo();en java:java -version

Pero no pude encontrar cómo lograr esto en C #.

Esta pregunta no responde, aunque el nombre sugiere que debería.

Entendí que depende del marco .NET, pero ¿hay alguna forma programática de descifrar mi marco? Quiero decir, sin ir al directorio y comprobar el nombre de mis carpetas .NET.

Salvador Dalí
fuente
55
Esta es la pregunta
Avi Turner
55
en Visual Studio: Propiedades del proyecto> Compilación> Avanzado ...> Versión del lenguaje: codeproject.com/Tips/865579/…
Slai

Respuestas:

66

Para obtener la versión del marco, mire la versión de uno de los ensamblajes principales, es decir

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

Obtener la versión del compilador de C # es algo más difícil, pero debería poder adivinar la versión comprobando qué versión de marco se usa.

Si está utilizando el compilador de línea de comandos (csc.exe) puede consultar la ayuda para ver la versión (de todos modos, también necesitaría saber la versión de Framework:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Alexei Levenkov
fuente
22
Desafortunadamente, Assembly.ImageRuntimeVersion no le dice el número de versión correcto: en mi PC, .NET 4.6 RC está instalado pero Assembly.ImageRuntimeVersion informa v4.0.30319
Matt
1
A menos que esté utilizando C # 6 que no mira la versión .NET.
Michael Puckett II
2
RE: Comentario de Matt: El hecho de que tenga una versión de .NET instalada en su PC, no significa que sea la versión en uso en su proyecto
LoJo
@LoJo: tienes toda la razón. Una razón es que Visual Studio permite la orientación múltiple (es decir, puede seleccionar la versión de .NET Target Framework en las propiedades del proyecto), la otra razón es que las nuevas versiones de Roslyn deben agregarse a través de NUGET a su proyecto. En tercer lugar, como escribí aquí , csc.exe está limitado a la versión 5.0 y no se puede usar para detectar versiones superiores de C #.
Matt
3
Nadie ha mencionado aún que la instrucción correcta para obtener la lista de versiones compatibles con su compilador Roslyn es "C: \ Archivos de programa (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe" / langversion :?
David A. Gray
235

Depende de lo .NET Frameworkque uses. Verifique la respuesta de Jon Skeet sobre Versiones.

Aquí hay una versión corta de su respuesta.

C # 1.0 lanzado con .NET 1.0

C # 1.2 (extrañamente suficiente); lanzado con .NET 1.1

C # 2.0 lanzado con .NET 2.0

C # 3.0 lanzado con .NET 3.5

C # 4.0 lanzado con .NET 4

C # 5.0 lanzado con .NET 4.5

C # 6.0 lanzado con .NET 4.6

C # 7.0 se lanza con .NET 4.6.2

C # 7.3 se lanza con .NET 4.7.2

C # 8.0 se lanza con NET Core 3.0

Praveen
fuente
44
Solo un aviso; C # 6 usa un compilador diferente (Roslyn) y compilará el código fuente a otras versiones de .NET, no solo .NET 4.6.
Michael Puckett II
12
Pero puede compilar .NET 2.0 con el compilador C # 7.0. Verificar la versión .NET es una deducción muy limitada y solo da una respuesta probable.
Abel
55
Permítanme agregar al comentario de @ Abel que este enlace le muestra cómo puede cambiar la versión del lenguaje C # (casi) independientemente del marco. Por lo tanto, solo puede deducir de los errores de sintaxis que obtiene que el código asume una versión más nueva de C # de la que podría haber seleccionado en las propiedades.
Matt
87

Si bien esto no responde a su pregunta directamente, lo estoy poniendo aquí ya que Google trajo esta página primero en mis búsquedas cuando estaba buscando esta información.

Si está utilizando Visual Studio , puede hacer clic con el botón derecho en su proyecto -> Propiedades -> Compilar -> Avanzado Esto debería enumerar las versiones disponibles, así como la que está utilizando su proyecto.

ingrese la descripción de la imagen aquí

Darth
fuente
77
¿Qué versión tengo si en el menú desplegable veo Automatically selected based on framework versiony no puedo seleccionar nada del menú desplegable (está deshabilitado)? Estoy usando el VS 2019.
hellouworld
@hellouworld Haga clic en Por qué no puedo seleccionar un hipervínculo de versión C # diferente y la página web le proporcionará la referencia ... luego regrese a la pestaña Aplicación y vea qué marco de destino ha seleccionado.
Johnny Wu
8

Versión .NET a través del registro

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ explore los elementos secundarios y examine cada versión. El que tiene la clave 'Completo' es la versión en el sistema.

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

Versión .NET a través de Visual Studio

Ayuda -> Acerca de Microsoft Visual Studio -> La versión .NET se especifica en la esquina superior derecha.

Según tengo entendido en este momento, Visual Studio usa .NET Framework del sistema operativo.

La versión de .NET Framework de destino de un proyecto en Visual Studio se puede modificar con Propiedades del proyecto -> Aplicación -> Marco de destino

A través del dll

Si conoce el directorio de .NET Framework, por ejemplo, C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Abra System.dll, haga clic derecho -> propiedades -> pestaña Detalles

Versión C #

Ayuda -> Acerca de Microsoft Visual Studio

En las listas de productos instalados hay Visual C #. En mi caso Visual C # 2015

Visual Studio (Microsoft) envía C # por su nombre Visual C #.

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

C # 6, Visual Studio .NET 2015 Versión actual, ver abajo

Amod Pandey
fuente
7

La versión de C # que está utilizando depende totalmente de la versión .Net que está utilizando.

Si está utilizando Visual Studio para el desarrollo, puede elegir la versión de .NET Framework, la versión C # asociada con ella viene en consecuencia

Estas son las versiones de C # conocidas:

  • C # 1.0 lanzado con .NET 1.0 y VS2002 (enero de 2002)
  • C # 1.2 (extrañamente suficiente); lanzado con .NET 1.1 y VS2003 (abril de 2003). Primera versión para llamar Disposeen IEnumerators que implementado IDisposable. Algunas otras características pequeñas.
  • C # 2.0 lanzado con .NET 2.0 y VS2005 (noviembre de 2005). Nuevas características principales: genéricos, métodos anónimos, tipos anulables, bloques iteradores
  • C # 3.0 lanzado con .NET 3.5 y VS2008 (noviembre de 2007). Nuevas características principales: expresiones lambda, métodos de extensión, árboles de expresiones, tipos anónimos, escritura implícita ( var), expresiones de consulta
  • C # 4.0 lanzado con .NET 4 y VS2010 (abril de 2010). Nuevas características principales: enlace tardío ( dynamic), delegado y varianza genérica de interfaz, más compatibilidad con COM, argumentos con nombre y parámetros opcionales
  • C # 5.0 lanzado con .NET 4.5 en agosto de 2012.

Refrence Jon Skeet's C # Versiones Respuesta

Vinay Pratap Singh
fuente
U puede usar algunas funciones de C # 3.0 en .NET 2.0, por lo que no es realmente un mapeo 1-1.
nefarel
13
Esto está mal: no depende de la versión .NET, depende del compilador.
markmnl
Esto es completamente incorrecto. Mi proyecto actual está configurado en .NET 4.0 y aún así puedo usar las funciones de C # 7.0. Pero una vez que presiono el control remoto, el sistema CI / CD no se pudo construir porque usa la versión 5 o 6 de C #
phuclv
Esto no es cierto desde C # 6.0
asaf92
6

De manera predeterminada, a continuación se muestran las versiones correspondientes de los compiladores de C # para 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

También puede modificar la versión, siga los pasos a continuación.

Abra la ventana de propiedades del proyecto:

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
fuente
5

Desde el símbolo del sistema del desarrollador, escriba

csc -langversion:?

Eso mostrará todas las versiones de C # compatibles, incluida la predeterminada:

1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)
Fortesl
fuente
5

Gracias a @fortesl y esta respuesta

Estoy usando VS 2019 y no te dice fácilmente la versión de C # que estás usando. Estoy trabajando con .Net Core 3.0 y VS 2019 usando C # 8 en ese entorno. Pero "csc -langversion :?" deja esto 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

No estoy seguro de qué csc -version identifica:

D:\>csc --version
Microsoft (R) Visual C# Compiler version 3.4.0-beta1-19462-14 (2f21c63b)
Copyright (C) Microsoft Corporation. All rights reserved.
guyr
fuente
Se parece a OP necesita una codificación relacionadas respuesta
bradbury9
4

Si está utilizando VS2015, siga los pasos a continuación para descubrir lo mismo:

  1. Haga clic derecho en el proyecto.
  2. Haga clic en la pestaña Propiedades .
  3. Desde la ventana de propiedades, seleccione la opción Construir .
  4. En ese clic en el botón Avanzar .
  5. Allí encontrará la versión del idioma.

Las imágenes a continuación muestran los pasos para lo mismo:

Paso 1:

Paso 1

Paso 2:

Paso 2

Sunil Jadhav
fuente
3

Para ver la versión de compilador instalada de VC #:

Abra el símbolo del sistema de Visual Studio y simplemente escriba csc y ​​luego presione Entrar.

Verás algo como lo siguiente:

Microsoft (R) Visual C # Compiler versión 4.0.30319.34209

para Microsoft (R) .NET Framework 4.5

Derechos de autor (C) Microsoft Corporation. Todos los derechos reservados.

PD: " CSC " significa " C Sharp Compiler ". En realidad, utilizando este comando, ejecuta csc.exe, que es un archivo ejecutable que se encuentra en "c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX". Para obtener más información sobre CSC, visite http://www.file.net/process/csc.exe.html

Siyavash Hamdi
fuente
3

Para Windows, ejecuta dev en la línea de comando / programa de búsqueda y selecciona Símbolo del sistema de desarrollador para VS. Entonces solo vas a correr

csc

Ahora obtienes información similar a

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

Para Windows y si comienzas con terminal cmd

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

Ahora puede ver todos los directorios y archivos en .NET \ Framework \ Por favor, seleccione v ... latest y vaya allí, por ejemplo,

cd v4.0.30319

correr

csc

Verá información sobre la versión del compilador de C #, que puede ser algo similar a

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

La versión de idioma se elige en función del marco de destino del proyecto de forma predeterminada.

Cada proyecto puede usar una versión diferente de .Net framework, el compilador C # más adecuado se elegirá de forma predeterminada al mirar el marco de destino. Desde Visual Studio, la interfaz de usuario no permitirá a los usuarios cambiar la versión del idioma, sin embargo, podemos cambiar la versión del idioma editando el archivo del proyecto con la adición de un nuevo grupo de propiedades. Pero esto puede causar problemas de compilación / tiempo de ejecución en el código existente.

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

Pude ver lo siguiente de los documentos de Microsoft.

El compilador determina un valor predeterminado basado en estas reglas:

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
fuente
0

Aquí hay una descripción general de cómo se relacionan, configuran y modifican las versiones de .NET framework y compilador. Cada proyecto tiene una versión o versiones objetivo de .NET Framework, por ejemplo, la versión 3.xo 2.x. .NET Framework contiene los tipos y componentes de tiempo de ejecución.

La instalación de la versión de Visual Studio y la versión de .NET Framework determinan la versión compatible del lenguaje C # y las opciones del compilador que se pueden usar. La versión predeterminada de C # y las opciones utilizadas en un proyecto de Visual Studio es la última versión de idioma instalada que es compatible con la versión de .NET Framework que se está utilizando.

Para ver o actualizar el lenguaje Framework o C # dentro de un proyecto dentro de Visual Studio 2011:

  • haga clic derecho en el proyecto dentro del Explorador de soluciones y seleccione Propiedades
  • seleccione 'Aplicación' en el panel de navegación izquierdo. En Marco de destino: es la versión de marco .NET. Seleccione la flecha hacia abajo para ver todas las versiones de framework disponibles.

  • seleccione 'Construir' en el panel de navegación izquierdo. En la sección 'General' del panel junto a 'Versión de idioma:' se encuentra la versión de idioma del compilador de C # que se está utilizando, por ejemplo, 'predeterminada' o c # 5.0

  • seleccione la flecha hacia abajo en el menú desplegable 'Versión de idioma: "para ver todas las versiones de idioma disponibles. Si' predeterminado 'es la versión de C # que se está utilizando, se utilizará la última versión de idioma compatible de C #.

Para ver la versión exacta del idioma del compilador para 'predeterminado', ingrese lo siguiente en el símbolo del sistema del desarrollador para su versión instalada de Visual Studio. Por ejemplo, desde el ícono de Inicio de Windows, seleccione el ícono: "Símbolo del sistema del desarrollador para VS2011" e ingrese:

csc -langversion: Predeterminado

Microsoft (R) Visual C # Compiler versión 4.7.3062.0 para c # 5

edW
fuente
0

Para obtener la versión de C # del código, use este código de la documentación de Microsoft para obtener la versión de .NET Framework y luego combínelo usando la tabla que todos los demás mencionan. Puede codificar el Framework para el mapa de versión de C # en un diccionario o algo para que su función devuelva la versión de C #. Funciona si tienes .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
fuente