Welche Version von C # verwende ich?

191

Ich möchte herausfinden, welche Version von C # ich verwende. Wenn ich Python verwenden würde, würde ich so etwas wie python -Vüber die Befehlszeile tun oder Folgendes eingeben:

import sys
print sys.version

In PHP würde ich so etwas machen: phpinfo();in Java:java -version

Aber ich konnte in C # nicht herausfinden, wie dies erreicht werden kann.

Diese Frage beantwortet sie nicht, obwohl der Name dies nahelegt.

Ich habe festgestellt, dass es vom .NET-Framework abhängt, aber gibt es eine programmatische Möglichkeit, mein Framework herauszufinden? Ich meine, ohne in das Verzeichnis zu gehen und den Namen meiner .NET-Ordner zu überprüfen.

Salvador Dali
quelle
5
Dies ist John Skeets bestbewertete Frage
Avi Turner
5
in Visual Studio: Projekteigenschaften> Erstellen> Erweitert ...> Sprachversion: codeproject.com/Tips/865579/…
Slai

Antworten:

65

Um eine Version des Frameworks zu erhalten, schauen Sie sich die Version einer der Hauptassemblies an, d. H.

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

Das Abrufen der Version des C # -Compilers ist etwas schwieriger, aber Sie sollten in der Lage sein, die Version zu erraten, indem Sie überprüfen, welche Framework-Version verwendet wird.

Wenn Sie den Befehlszeilen-Compiler (csc.exe) verwenden, können Sie die Hilfe überprüfen, um die Version anzuzeigen (außerdem müssen Sie die Framework-Version trotzdem kennen:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Alexei Levenkov
quelle
22
Leider teilt Assembly.ImageRuntimeVersion Ihnen nicht die richtige Versionsnummer mit - auf meinem PC ist .NET 4.6 RC installiert, aber Assembly.ImageRuntimeVersion meldet v4.0.30319
Matt
1
Es sei denn, Sie verwenden C # 6, das sich nicht mit der .NET-Version befasst.
Michael Puckett II
2
RE: Matts Kommentar: Nur weil Sie eine Version von .NET auf Ihrem PC installiert haben, heißt das nicht, dass diese Version in Ihrem Projekt verwendet wird
LoJo
@ LoJo - Du hast absolut recht. Ein Grund ist, dass Visual Studio Multi-Targetting zulässt (dh Sie können die .NET Target Framework-Version in den Projekteigenschaften auswählen), der andere Grund ist, dass neuere Roslyn-Versionen über NUGET zu Ihrem Projekt hinzugefügt werden müssen. Drittens ist csc.exe , wie ich hier geschrieben habe , auf Version 5.0 beschränkt und kann nicht zum Erkennen höherer Versionen von C # verwendet werden.
Matt
3
Bisher hat noch niemand erwähnt, dass die richtige Anweisung zum Abrufen der Liste der von Ihrem Roslyn-Compiler unterstützten Versionen "C: \ Programme (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe" lautet. / langversion:?
David A. Gray
231

Es hängt davon ab, .NET Frameworkwas Sie verwenden. Überprüfen Sie Jon Skeets Antwort zu Versionen.

Hier ist eine kurze Version seiner Antwort.

C # 1.0 wurde mit .NET 1.0 veröffentlicht

C # 1.2 (seltsamerweise); veröffentlicht mit .NET 1.1

C # 2.0 mit .NET 2.0 veröffentlicht

C # 3.0 wurde mit .NET 3.5 veröffentlicht

C # 4.0 mit .NET 4 veröffentlicht

C # 5.0 wurde mit .NET 4.5 veröffentlicht

C # 6.0 wurde mit .NET 4.6 veröffentlicht

C # 7.0 wird mit .NET 4.6.2 veröffentlicht

C # 7.3 wird mit .NET 4.7.2 veröffentlicht

C # 8.0 wird mit NET Core 3.0 veröffentlicht

Praveen
quelle
13
... und C # 6.0 wird mit .NET 4.6
Matt
4
Nur ein Kopf hoch; C # 6 verwendet einen anderen Compiler (Roslyn) und kompiliert den Quellcode nicht nur für .NET 4.6, sondern auch für andere .NET-Versionen.
Michael Puckett II
6
... und C # 7.0 wird mit .NET 4.6.2
Jivan
12
Sie können .NET 2.0 jedoch mit dem C # 7.0-Compiler kompilieren. Das Überprüfen der .NET-Version ist ein sehr begrenzter Abzug und gibt nur eine wahrscheinliche Antwort.
Abel
5
Lassen Sie mich zu @ Abels Kommentar hinzufügen, dass dieser Link Ihnen zeigt, wie Sie die C # -Sprachenversion (fast) unabhängig vom Framework ändern können. Sie können also nur von Syntaxfehlern, die Sie erhalten, ableiten, dass der Code eine neuere Version von C # annimmt, als Sie möglicherweise in den Eigenschaften ausgewählt haben.
Matt
87

Dies beantwortet Ihre Frage zwar nicht direkt, aber ich stelle dies hier ein, da Google diese Seite bei meinen Suchanfragen als erstes aufgerufen hat, als ich nach diesen Informationen gesucht habe.

Wenn Sie Visual Studio verwenden , können Sie mit der rechten Maustaste auf Ihr Projekt klicken -> Eigenschaften -> Erstellen -> Erweitert. Hier sollten sowohl die verfügbaren als auch die von Ihrem Projekt verwendeten Versionen aufgeführt sein.

Geben Sie hier die Bildbeschreibung ein

Darth
quelle
6
Welche Version habe ich, wenn ich in der Dropdown- Automatically selected based on framework versionListe die sehe und nichts aus der Dropdown-Liste auswählen kann (sie ist deaktiviert)? Ich benutze den VS 2019.
hellouworld
@hellouworld Klicken Sie auf den Hyperlink Warum kann ich keinen anderen C # -Versions-Hyperlink auswählen? Auf der Webseite finden Sie die Referenz. Gehen Sie dann zurück zur Registerkarte Anwendung und sehen Sie, welches Ziel-Framework Sie ausgewählt haben.
Johnny Wu
8

.NET-Version über die Registrierung

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework-Setup \ NDP \ Untersuchen Sie die untergeordneten Elemente und sehen Sie sich jede Version an. Die mit dem Schlüssel 'Voll' ist die Version auf dem System.

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

.NET-Version über Visual Studio

Hilfe -> Informationen zu Microsoft Visual Studio -> Die .NET-Version wird oben rechts angegeben.

Soweit ich weiß, verwendet Visual Studio derzeit .NET Framework vom Betriebssystem aus.

Die .NET Framework-Zielversion eines Projekts in Visual Studio kann mit Projekteigenschaften -> Anwendung -> Zielframework geändert werden

Durch die DLL

Wenn Sie das .NET Framework-Verzeichnis kennen, z. B. C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Öffnen Sie System.dll und klicken Sie mit der rechten Maustaste auf -> Eigenschaften -> Registerkarte Details

C # -Version

Hilfe -> Informationen zu Microsoft Visual Studio

In den Listen der installierten Produkte befindet sich Visual C #. In meinem Fall Visual C # 2015

Visual Studio (Microsoft) liefert C # mit dem Namen Visual C #.

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

C # 6, Visual Studio .NET 2015 Aktuelle Version, siehe unten

Amod Pandey
quelle
7

Die von Ihnen verwendete C # -Version hängt vollständig von der von Ihnen verwendeten .NET-Version ab.

Wenn Sie Visual Studio für die Entwicklung verwenden, können Sie die .net Framework-Version auswählen, die der zugehörigen c # -Version entspricht

Dies sind die bekannten Versionen von C #:

  • C # 1.0 veröffentlicht mit .NET 1.0 und VS2002 (Januar 2002)
  • C # 1.2 (seltsamerweise); veröffentlicht mit .NET 1.1 und VS2003 (April 2003). Erste Version zum Aufrufen Disposevon IEnumerators, die implementiert IDisposable. Ein paar andere kleine Funktionen.
  • C # 2.0 veröffentlicht mit .NET 2.0 und VS2005 (November 2005). Wichtige neue Funktionen: Generika, anonyme Methoden, nullfähige Typen, Iteratorblöcke
  • C # 3.0 veröffentlicht mit .NET 3.5 und VS2008 (November 2007). Wichtige neue Funktionen: Lambda-Ausdrücke, Erweiterungsmethoden, Ausdrucksbäume, anonyme Typen, implizite Typisierung ( var), Abfrageausdrücke
  • C # 4.0 veröffentlicht mit .NET 4 und VS2010 (April 2010). Wichtige neue Funktionen: Late Binding ( dynamic), generische Varianz von Delegaten und Schnittstellen, mehr COM-Unterstützung, benannte Argumente und optionale Parameter
  • C # 5.0 wurde mit .NET 4.5 veröffentlicht im August 2012 .

Aktualisieren Sie Jon Skeets C # -Versionen Antwort

Vinay Pratap Singh
quelle
Sie können einige Funktionen von C # 3.0 in .NET 2.0 verwenden, sodass es sich nicht wirklich um eine 1-1-Zuordnung handelt.
Nefarel
13
Dies ist falsch - es hängt nicht von der .NET-Version ab, sondern vom Compiler.
Markmnl
das ist einfach falsch. Mein aktuelles Projekt ist auf .NET 4.0 eingestellt, und dennoch kann ich C # 7.0-Funktionen verwenden. Aber sobald ich auf Remote
drücke, konnte
Dies ist nicht wahr seit C # 6.0
asaf92
6

Standardmäßig folgt die entsprechende Version von C # -Compilern für 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

Sie können die Version auch ändern. Befolgen Sie dazu die folgenden Schritte.

Öffnen Sie das Fenster mit den Projekteigenschaften:

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

Geben Sie an der Eingabeaufforderung des Entwicklers ein

csc -langversion:?

Daraufhin werden alle unterstützten C # -Versionen angezeigt, einschließlich der Standardeinstellungen:

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

Wenn Sie VS2015 verwenden, führen Sie die folgenden Schritte aus, um dasselbe herauszufinden:

  1. Klicken Sie mit der rechten Maustaste auf das Projekt.
  2. Klicken Sie auf die Registerkarte Eigenschaften .
  3. Wählen Sie im Eigenschaftenfenster die Option Erstellen .
  4. In diesem Klick auf der Advance - Taste.
  5. Dort finden Sie die Sprachversion.

Die folgenden Bilder zeigen die Schritte dafür:

Schritt 1:

Schritt 1

Schritt 2:

Schritt 2

Sunil Jadhav
quelle
4

Danke an @fortesl und diese Antwort

Ich verwende VS 2019 und es sagt Ihnen nicht leicht, welche C # -Version Sie verwenden. Ich arbeite mit .Net Core 3.0 und VS 2019 mit C # 8 in dieser Umgebung. Aber "csc -langversion:?" macht dies deutlich:

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

Nicht sicher, welche csc-Version identifiziert:

D:\>csc --version
Microsoft (R) Visual C# Compiler version 3.4.0-beta1-19462-14 (2f21c63b)
Copyright (C) Microsoft Corporation. All rights reserved.
Guyr
quelle
Es sieht so aus, als ob OP eine codierungsbezogene Antwort benötigt
bradbury9
3

Um die installierte Compilerversion von VC # anzuzeigen:

Öffnen Sie die Visual Studio-Eingabeaufforderung, geben Sie einfach csc ein und drücken Sie die Eingabetaste.

Sie werden ungefähr Folgendes sehen:

Microsoft (R) Visual C # Compiler Version 4.0.30319.34209

für Microsoft (R) .NET Framework 4.5

Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

PS: " CSC " steht für " C Sharp Compiler ". Mit diesem Befehl führen Sie tatsächlich csc.exe aus, eine ausführbare Datei, die sich unter "c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX" befindet. Weitere Informationen zu CSC finden Sie unter http://www.file.net/process/csc.exe.html

Siyavash Hamdi
quelle
3

Unter Windows führen Sie dev in der Befehls- / Suchprogrammzeile aus und wählen Developer Command Prompt for VS aus. Dann rennst du einfach

csc

Jetzt erhalten Sie ähnliche Informationen wie

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

Für Windows und wenn Sie mit dem cmd-Terminal beginnen

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

Jetzt sehen Sie alle Verzeichnisse und Dateien in .NET \ Framework \. Bitte wählen Sie v ... latest aus und gehen Sie dorthin, z.

cd v4.0.30319

Lauf

csc

Sie sehen Informationen über die Version des C # -Compilers, die ähnlich sein können

Microsoft (R) Visual C# Compiler version 4.7.2556.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.
römisch
quelle
1

Die Sprachversion wird standardmäßig basierend auf dem Zielframework des Projekts ausgewählt.

Jedes Projekt verwendet möglicherweise eine andere Version des .Net-Frameworks. Der am besten geeignete C # -Compiler wird standardmäßig anhand des Zielframeworks ausgewählt. In Visual Studio können Benutzer die Benutzeroberfläche nicht über die Benutzeroberfläche ändern. Sie können die Sprachversion jedoch ändern, indem Sie die Projektdatei bearbeiten und eine neue Eigenschaftsgruppe hinzufügen. Dies kann jedoch zu Kompilierungs- / Laufzeitproblemen im vorhandenen Code führen.

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

Ich konnte Folgendes aus Microsoft-Dokumenten sehen.

Der Compiler bestimmt einen Standard basierend auf diesen Regeln:

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

Hier finden Sie eine Übersicht darüber, wie die .NET Framework- und Compiler-Versionen zusammenhängen, festgelegt und geändert werden. Jedes Projekt verfügt über eine oder mehrere Ziel-.NET Framework-Versionen, z. B. Version 3.x oder 2.x. Das .NET Framework enthält die Laufzeittypen und -komponenten.

Die Installation der Visual Studio-Version und die .NET Framework-Version bestimmen die kompatible C # -Sprachenversion und die Compileroptionen, die verwendet werden können. Die in einem Visual Studio-Projekt verwendete Standardversion und -option c # ist die neueste installierte Sprachversion, die mit der verwendeten .NET Framework-Version kompatibel ist.

So zeigen Sie die Framework- oder C # -Sprache in einem Projekt in Visual Studio 2011 an oder aktualisieren sie:

  • Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften
  • Wählen Sie im linken Navigationsbereich 'Anwendung'. Unter Zielframework: ist die .NET Framework-Version. Wählen Sie den Abwärtspfeil, um alle verfügbaren Framework-Versionen anzuzeigen.

  • Wählen Sie im linken Navigationsbereich "Erstellen". Im Abschnitt 'Allgemein' des Bereichs neben 'Sprachversion:' wird die Sprachversion des c # -Compilers verwendet, z. B. 'Standard' oder c # 5.0

  • Wählen Sie den Abwärtspfeil in der Dropdown-Liste "Sprachversion:", um alle verfügbaren Sprachversionen anzuzeigen. Wenn "Standard" die verwendete C # -Version ist, wird die neueste kompatible C # -Sprachenversion verwendet.

Geben Sie an der Entwickler-Eingabeaufforderung für Ihre installierte Visual Studio-Version Folgendes ein, um die genaue Version der Compilersprache für "Standard" anzuzeigen. Wählen Sie beispielsweise im Windows-Startsymbol das Symbol "Developer Command Prompt for VS2011" aus und geben Sie Folgendes ein:

csc -langversion: Standard

Microsoft (R) Visual C # Compiler Version 4.7.3062.0 für c # 5

edW
quelle
0

Um die C # -Version aus dem Code abzurufen, verwenden Sie diesen Code aus der Microsoft-Dokumentation , um die .NET Framework-Version abzurufen, und ordnen Sie sie dann anhand der Tabelle zu , die alle anderen erwähnen. Sie können die Framework-zu-C # -Versionszuordnung in einem Wörterbuch oder etwas anderem codieren, damit Ihre Funktion die C # -Version zurückgibt. Funktioniert, wenn Sie .NET Framework> = 4.5 haben.

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
Stapelunterlauf
quelle