Której wersji C # używam

191

Chcę dowiedzieć się, której wersji C # używam. Gdybym używał Pythona, zrobiłbym coś python -Vz wiersza poleceń lub wpisz:

import sys
print sys.version

W PHP zrobiłbym coś takiego: phpinfo();w java:java -version

Ale nie udało mi się znaleźć sposobu na osiągnięcie tego w języku C #.

Na to pytanie nie ma odpowiedzi, chociaż nazwa sugeruje, że powinno.

Zrozumiałem, że to zależy od frameworku .NET, ale czy istnieje jakiś programowy sposób rozszyfrowania mojego frameworka? Mam na myśli bez wchodzenia do katalogu i sprawdzania nazw moich folderów .NET.

Salvador Dali
źródło
5
To jest najwyżej ocenione pytanie Johna Skeeta
Avi Turner
5
w Visual Studio: Właściwości projektu> Kompilacja> Zaawansowane ...> Wersja językowa: codeproject.com/Tips/865579/…
Slai

Odpowiedzi:

66

Aby uzyskać wersję frameworka - spójrz na wersję jednego z głównych zestawów, tj

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

Pobieranie wersji kompilatora C # jest nieco trudniejsze, ale powinieneś być w stanie odgadnąć wersję, sprawdzając, która wersja jest używana.

Jeśli używasz kompilatora wiersza poleceń (csc.exe), możesz sprawdzić pomoc, aby zobaczyć wersję (musisz też znać wersję Framework:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Aleksiej Lewenkow
źródło
22
Niestety, Assembly.ImageRuntimeVersion nie podaje prawidłowego numeru wersji - na moim komputerze zainstalowano .NET 4.6 RC, ale Assembly.ImageRuntimeVersion informuje o wersji 4.0.0303019
Matt.
1
Chyba że używasz C # 6, który nie patrzy na wersję .NET.
Michael Puckett II
2
RE: Komentarz Matta: Tylko dlatego, że masz jedną wersję .NET zainstalowaną na twoim komputerze, to nie znaczy, że jest to wersja używana w twoim projekcie
LoJo
@LoJo - Masz absolutną rację. Jednym z powodów jest to, że Visual Studio pozwala na wielozadaniowość (tj. Możesz wybrać wersję .NET Target Framework we właściwościach projektu), drugim powodem jest to, że nowsze wersje Roslyn muszą być dodane przez twój projekt do NUGET. Po trzecie, jak napisałem tutaj , csc.exe jest ograniczony do wersji 5.0 i nie może być używany do wykrywania wyższych wersji C #.
Matt
3
Nikt jeszcze nie wspomniał, że poprawną instrukcją pobierania listy wersji obsługiwanych przez kompilator Roslyn jest „C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe” / langversion :?
David A. Gray,
235

To zależy od tego .NET Framework, którego używasz. Sprawdź odpowiedź Jona Skeeta na temat wersji.

Oto krótka wersja jego odpowiedzi.

Wersja C # 1.0 wydana z .NET 1.0

C # 1.2 (dość dziwnie); wydany z .NET 1.1

C # 2.0 wydany z .NET 2.0

C # 3.0 wydany z .NET 3.5

Wersja C # 4.0 wydana z .NET 4

Wersja C # 5.0 wydana z .NET 4.5

C # 6.0 wydany z .NET 4.6

Wersja C # 7.0 została wydana z .NET 4.6.2

Wersja C # 7.3 została wydana z .NET 4.7.2

Wersja C # 8.0 została wydana wraz z NET Core 3.0

Praveen
źródło
4
Tylko jedna głowa; C # 6 używa innego kompilatora (Roslyn) i skompiluje kod źródłowy do innych wersji .NET, nie tylko .NET 4.6.
Michael Puckett II
12
Ale możesz skompilować .NET 2.0 za pomocą kompilatora C # 7.0. Sprawdzanie wersji .NET jest bardzo ograniczoną dedukcją i daje tylko prawdopodobną odpowiedź.
Abel
5
Dodajmy do komentarza @ Abel, że ten link pokazuje, jak możesz zmienić wersję językową C # (prawie) niezależnie od frameworka. Możesz więc odjąć tylko od błędów składniowych, które otrzymujesz, że kod zakłada nowszą wersję C # niż mogłeś wybrać we właściwościach.
Matt
87

Chociaż nie odpowiada to bezpośrednio na twoje pytanie, umieszczam to tutaj, ponieważ Google przywołał tę stronę jako pierwszą w moich wyszukiwaniach, gdy szukałem tych informacji.

Jeśli używasz Visual Studio , można kliknąć prawym przyciskiem myszy na projekcie -> Właściwości -> Build -> Zaawansowane ta powinna listy dostępnych wersji, jak również jeden Twój proj korzysta.

wprowadź opis zdjęcia tutaj

Darth
źródło
7
Jaką mam wersję, jeśli w rozwijanym menu widzę Automatically selected based on framework versioni nie mogę nic wybrać z rozwijanego menu (jest wyłączone)? Używam VS 2019.
hellouworld
@hellouworld Kliknij przycisk Dlaczego nie mogę wybrać innego hiperłącza w wersji C #, a strona internetowa dostarczy Ci referencje ... następnie wróć do karty Aplikacja i zobacz, którą strukturę docelową wybrałeś.
Johnny Wu
8

Wersja .NET poprzez rejestr

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ eksploruj dzieci i przeglądaj każdą wersję. Ten z kluczem „Pełny” to wersja w systemie.

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

Wersja .NET za pośrednictwem programu Visual Studio

Pomoc -> O Microsoft Visual Studio -> Wersja .NET jest podana w prawym górnym rogu.

Jak rozumiem, Visual Studio używa .NET Framework z systemu operacyjnego.

Docelową wersję .NET Framework projektu w Visual Studio można zmodyfikować za pomocą Właściwości projektu -> Aplikacja -> Target Framework

Poprzez dll

Jeśli znasz katalog .NET Framework, np. C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Otwórz System.dll, kliknij prawym przyciskiem myszy -> właściwości -> zakładka Szczegóły

Wersja C #

Pomoc -> O Microsoft Visual Studio

Na listach zainstalowanych produktów znajduje się Visual C #. W moim przypadku Visual C # 2015

Visual Studio (Microsoft) dostarcza C # według nazwy Visual C #.

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

C # 6, Visual Studio .NET 2015 Aktualna wersja, patrz poniżej

Amod Pandey
źródło
7

Używana wersja C # zależy całkowicie od używanej wersji .Net.

jeśli używasz Visual Studio do programowania, możesz wybrać wersję .NET Framework, do której dołączona jest odpowiednia wersja c #

Są to znane wersje C #:

  • Wersja C # 1.0 wydana z .NET 1.0 i VS2002 (styczeń 2002)
  • C # 1.2 (dość dziwnie); wydany z .NET 1.1 i VS2003 (kwiecień 2003). Pierwsza wersja do rozmowy Disposena IEnumerators których realizowane IDisposable. Kilka innych małych funkcji.
  • C # 2.0 wydany z .NET 2.0 i VS2005 (listopad 2005). Główne nowe funkcje: ogólne, anonimowe metody, typy zerowalne, bloki iteratora
  • C # 3.0 wydany z .NET 3.5 i VS2008 (listopad 2007). Najważniejsze nowe funkcje: wyrażenia lambda, metody rozszerzeń, drzewa wyrażeń, typy anonimowe, typowanie niejawne ( var), wyrażenia zapytań
  • Wersja C # 4.0 wydana z .NET 4 i VS2010 (kwiecień 2010). Najważniejsze nowe funkcje: późne wiązanie ( dynamic), ogólne wariancje delegowania i interfejsu, większa obsługa modelu COM, nazwane argumenty i opcjonalne parametry
  • Wersja C # 5.0 wydana z .NET 4.5 w sierpniu 2012 r.

Odpowiedzi na wersje C # autorstwa Refrence Jon Skeet

Vinay Pratap Singh
źródło
Możesz używać niektórych funkcji z C # 3.0 w .NET 2.0, więc tak naprawdę nie jest to mapowanie 1-1.
nefarel,
13
To źle - nie zależy od wersji .NET, zależy od kompilatora.
markmnl
to jest po prostu złe. Mój obecny projekt jest ustawiony na .NET 4.0, a mimo to nadal mogę korzystać z funkcji C # 7.0. Ale kiedy nacisnę na zdalny, system CI / CD nie zbuduje się, ponieważ używa C # w wersji 5 lub 6
phuclv
Nie jest to prawdą, ponieważ C # 6.0
asaf92
6

Domyślnie następujące są odpowiednimi wersjami kompilatorów C # dla 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

Możesz również zmodyfikować wersję, wykonaj poniższe czynności.

Otwórz okno właściwości projektu:

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
źródło
5

W wierszu polecenia programisty wpisz

csc -langversion:?

Spowoduje to wyświetlenie wszystkich obsługiwanych wersji C #, w tym domyślnej:

1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)
fortesl
źródło
5

Dzięki @fortesl i tej odpowiedzi

Korzystam z VS 2019 i nie łatwo ci powiedzieć, jakiej wersji C # używasz. Pracuję z .Net Core 3.0 i VS 2019 przy użyciu C # 8 w tym środowisku. Ale „csc -langversion :?” wyjaśnia to:

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

Nie jestem pewien, co identyfikuje wersja csc:

D:\>csc --version
Microsoft (R) Visual C# Compiler version 3.4.0-beta1-19462-14 (2f21c63b)
Copyright (C) Microsoft Corporation. All rights reserved.
Guyr
źródło
Wygląda na to, że OP potrzebuje odpowiedzi związanej z kodowaniem
bradbury9,
4

Jeśli używasz VS2015, wykonaj poniższe czynności, aby dowiedzieć się tego samego:

  1. Kliknij projekt prawym przyciskiem myszy.
  2. Kliknij kartę Właściwości .
  3. Z okna właściwości wybierz opcję Kompiluj .
  4. W tym kliknij przycisk Advance .
  5. Tam znajdziesz wersję językową.

Poniższe zdjęcia pokazują kroki dla tego samego:

Krok 1:

Krok 1

Krok 2:

Krok 2

Sunil Jadhav
źródło
3

Aby zobaczyć zainstalowaną wersję kompilatora VC #:

Otwórz wiersz polecenia programu Visual Studio i po prostu wpisz csc, a następnie naciśnij klawisz Enter.

Zobaczysz coś takiego:

Microsoft (R) Visual C # Compiler wersja 4.0.30319.34209

dla Microsoft (.) .NET Framework 4.5

Prawa autorskie (C) Microsoft Corporation. Wszelkie prawa zastrzeżone.

PS: „ CSC ” oznacza „ C Sharp Compiler ”. Właściwie za pomocą tego polecenia uruchamiasz csc.exe, który jest plikiem wykonywalnym, który znajduje się w „c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX”. Więcej informacji na temat CSC można znaleźć na stronie http://www.file.net/process/csc.exe.html

Siyavash Hamdi
źródło
3

W systemie Windows uruchamiasz dev w wierszu polecenia / programu wyszukiwania i wybierasz Wiersz polecenia programisty dla VS. Wtedy będziesz po prostu biec

csc

Teraz otrzymujesz informacje podobne do

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

W systemie Windows i jeśli zaczynasz z terminalem cmd

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

Teraz widzisz wszystkie katalogi i pliki w .NET \ Framework \ Proszę wybrać v ... najnowsze i przejść tam, na przykład,

cd v4.0.30319

Biegać

csc

Zobaczysz informacje o wersji kompilatora C #, które mogą być podobne do

Microsoft (R) Visual C# Compiler version 4.7.2556.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.
rzymski
źródło
2

Wersja językowa jest wybierana domyślnie na podstawie docelowej struktury projektu.

Każdy projekt może korzystać z innej wersji frameworka .Net, najlepiej odpowiedni kompilator C # zostanie domyślnie wybrany na podstawie frameworku docelowego. W Visual Studio interfejs użytkownika nie pozwoli użytkownikom na zmianę wersji językowej, możemy jednak zmienić wersję językową, edytując plik projektu z dodaniem nowej grupy właściwości. Może to jednak powodować problemy z kompilacją / czasem wykonywania w istniejącym kodzie.

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

Widziałem następujące dokumenty Microsoft.

Kompilator określa wartość domyślną na podstawie następujących reguł:

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
źródło
0

Oto przegląd tego, w jaki sposób .NET Framework i wersje kompilatora są powiązane, ustawiane i modyfikowane. Każdy projekt ma docelowe wersje platformy .NET, na przykład wersję 3.x lub 2.x. .NET Framework zawiera typy i składniki środowiska wykonawczego.

Instalacja wersji Visual Studio i .NET Framework określa kompatybilną wersję języka C # i opcje kompilatora, których można użyć. Domyślną wersją c # i opcjami używanymi w projekcie Visual Studio jest najnowsza zainstalowana wersja językowa, która jest kompatybilna z używaną wersją środowiska .NET.

Aby wyświetlić lub zaktualizować język Framework lub C # w projekcie w Visual Studio 2011:

  • kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz Właściwości
  • wybierz „Aplikacja” w lewym panelu nawigacyjnym. Under Framework docelowy: jest wersją platformy .NET. Wybierz strzałkę w dół, aby wyświetlić wszystkie dostępne wersje ram.

  • wybierz opcję „Kompiluj” w lewym okienku nawigacji. W sekcji „Ogólne” panelu obok „Wersja językowa:” używana jest wersja językowa kompilatora c #, na przykład „default” lub c # 5.0

  • wybierz strzałkę w dół w menu rozwijanym „Wersja językowa:”, aby wyświetlić wszystkie dostępne wersje językowe. Jeśli używana jest „domyślna” wersja c #, zostanie użyta najnowsza kompatybilna wersja językowa c #.

Aby zobaczyć dokładną wersję językową kompilatora dla „default”, wpisz następujące polecenie w wierszu polecenia programisty dla zainstalowanej wersji programu Visual Studio. Na przykład z ikony Start systemu Windows wybierz ikonę: „Wiersz polecenia programisty dla VS2011” i wprowadź:

csc -langversion: Domyślnie

Microsoft (R) Visual C # Compiler wersja 4.7.3062.0 dla c # 5

edW
źródło
0

Aby uzyskać wersję C # z kodu, użyj tego kodu z dokumentacji Microsoft, aby uzyskać wersję .NET Framework, a następnie dopasuj go, korzystając z tabeli, o której wszyscy wspominają. Możesz zakodować mapę frameworka do wersji C # w słowniku lub coś, aby funkcja zwróciła wersję C #. Działa, jeśli masz .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
Przepełnienie stosu
źródło