Какую версию C # я использую

191

Я хочу узнать, какую версию C # я использую. Если бы я использовал Python, я бы сделал что-то вроде python -Vкомандной строки или введите:

import sys
print sys.version

В PHP я бы сделал что-то вроде этого: phpinfo();в Java:java -version

Но я не смог найти, как добиться этого в C #.

Этот вопрос не отвечает на него, хотя название предполагает, что оно должно.

Я понял, что это зависит от платформы .NET, но есть ли программный способ выяснить мою структуру? Я имею в виду, не заходя в каталог и не проверяя имя моих папок .NET.

Сальвадор Дали
источник
5
Это самый рейтинговый вопрос
Ави Тёрнер,
5
в Visual Studio: Свойства проекта> Сборка> Дополнительно ...> Языковая версия: codeproject.com/Tips/865579/…
Слай

Ответы:

66

Чтобы получить версию фреймворка - посмотрите на версию одной из основных сборок, т.е.

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

Получить версию компилятора C # несколько сложнее, но вы должны быть в состоянии угадать версию, проверив, какая версия фреймворка используется.

Если вы используете компилятор командной строки (csc.exe), вы можете проверить справку, чтобы увидеть версию (также вам в любом случае нужно знать версию Framework:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Алексей Левенков
источник
22
К сожалению, Assembly.ImageRuntimeVersion не сообщает правильный номер версии - на моем ПК установлен .NET 4.6 RC, но Assembly.ImageRuntimeVersion сообщает v4.0.30319
Мэтт
1
Если вы не используете C # 6, который не смотрит на версию .NET.
Майкл Пакетт II
2
RE: Комментарий Мэтта: То, что на вашем компьютере установлена ​​одна версия .NET, не означает, что эта версия используется в вашем проекте
LoJo
@LoJo - Вы абсолютно правы. Одна из причин заключается в том, что Visual Studio допускает многоцелевое нацеливание (т. Е. Вы можете выбрать версию .NET Target Framework в свойствах проекта), а другая причина заключается в том, что более новые версии Roslyn необходимо добавлять через NUGET в ваш проект. В-третьих, как я писал здесь , csc.exe ограничен версией 5.0 и не может использоваться для обнаружения более высоких версий C #.
Мэтт
3
Никто еще не упомянул, что правильной инструкцией для получения списка версий, поддерживаемых вашим компилятором Roslyn, является «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe» / langversion :?
Дэвид А. Грэй,
235

Это зависит от того, .NET Frameworkчто вы используете. Проверьте ответ Джона Скита о версиях.

Вот краткая версия его ответа.

C # 1.0 выпущен с .NET 1.0

C # 1.2 (достаточно странно); выпущен с .NET 1.1

C # 2.0 выпущен с .NET 2.0

C # 3.0 выпущен с .NET 3.5

C # 4.0 выпущен с .NET 4

C # 5.0 выпущен с .NET 4.5

C # 6.0 выпущен с .NET 4.6

C # 7.0 выпущен с .NET 4.6.2

C # 7.3 выпущен с .NET 4.7.2

C # 8.0 выпущен с NET Core 3.0

Praveen
источник
4
Просто на голову; C # 6 использует другой компилятор (Roslyn) и будет компилировать исходный код для других версий .NET, а не только для .NET 4.6.
Майкл Пакетт II
12
Но вы можете скомпилировать .NET 2.0 с помощью компилятора C # 7.0. Проверка версии .NET является очень ограниченным выводом и дает только вероятный ответ.
Авель
5
Позвольте мне добавить к комментарию @ Abel, что эта ссылка показывает вам, как вы можете изменить (почти) версию языка C # независимо от фреймворка. Таким образом, вы можете только вычесть из получаемых синтаксических ошибок, что код предполагает более новую версию C #, чем вы могли выбрать в свойствах.
Мэтт
87

Хотя это не отвечает на ваш вопрос напрямую, я размещаю это здесь, так как Google поднял эту страницу первым в моих поисках, когда я искал эту информацию.

Если вы используете Visual Studio , вы можете щелкнуть правой кнопкой мыши по своему проекту -> Свойства -> Построить -> Расширенные. В этом списке будут перечислены доступные версии, а также версия, которую использует ваш proj.

введите описание изображения здесь

Darth
источник
7
Какая у меня версия, если в раскрывающемся списке я вижу Automatically selected based on framework versionи не могу ничего выбрать из раскрывающегося списка (она отключена)? Я использую VS 2019.
Hellouworld
@hellouworld Нажмите на ссылку Почему я не могу выбрать другую версию C #, и веб-страница предоставит вам ссылку ... затем вернитесь на вкладку Приложения и посмотрите, какую целевую платформу вы выбрали.
Джонни Ву
8

.NET версия через реестр

HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ NET Framework Setup \ NDP \ исследуют дочерние элементы и изучают каждую версию. Один с ключом «Полный» - это версия в системе.

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

.NET версия через Visual Studio

Справка -> О Microsoft Visual Studio -> Версия .NET указана в правом верхнем углу.

Как я понимаю, в это время Visual Studio использует .NET Framework из своей ОС.

Целевая версия .NET Framework проекта в Visual Studio может быть изменена с помощью Свойства проекта -> Приложение -> Target Framework.

Через длл

Если вы знаете каталог .NET Framework, например C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Откройте System.dll, щелкните правой кнопкой мыши -> Свойства -> вкладка Сведения

Версия на C #

Помощь -> О Microsoft Visual Studio

В списках установленных продуктов есть Visual C #. В моем случае Visual C # 2015

Visual Studio (Microsoft) поставляет C # по имени Visual C #.

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

C # 6, Visual Studio .NET 2015 Текущая версия, см. Ниже

Амод Пандей
источник
7

Используемая вами версия C # полностью зависит от используемой вами версии .Net.

Если вы используете Visual Studio для разработки, вы можете выбрать версию .net Framework, с которой связана соответствующая версия c #.

Это известные версии C #:

  • C # 1.0 выпущен с .NET 1.0 и VS2002 (январь 2002)
  • C # 1.2 (достаточно странно); выпущен с .NET 1.1 и VS2003 (апрель 2003 г.). Первая версия для вызова Disposeна IEnumeratorS, которая реализована IDisposable. Несколько других мелких особенностей.
  • C # 2.0 выпущен с .NET 2.0 и VS2005 (ноябрь 2005). Основные новые функции: обобщенные элементы, анонимные методы, обнуляемые типы, блоки итераторов
  • C # 3.0 выпущен с .NET 3.5 и VS2008 (ноябрь 2007). Основные новые функции: лямбда-выражения, методы расширения, деревья выражений, анонимные типы, неявная типизация ( var), выражения запросов
  • C # 4.0 выпущен с .NET 4 и VS2010 (апрель 2010). Основные новые функции: поздняя привязка ( dynamic), общая дисперсия делегата и интерфейса, расширенная поддержка COM, именованные аргументы и необязательные параметры.
  • C # 5.0 выпущен с .NET 4.5 в августе 2012 года.

Референс Джон Скит C # Версии Ответ

Винай Пратап Сингх
источник
Вы можете использовать некоторые функции из C # 3.0 в .NET 2.0, так что в действительности это не отображение 1-1.
Нефарел
13
Это неправильно - это не зависит от версии .NET, это зависит от компилятора.
markmnl
это совершенно неправильно. Мой текущий проект настроен на .NET 4.0, и все же я все еще могу использовать функции C # 7.0. Но как только я перешел на удаленный компьютер, система CI / CD не смогла собрать, потому что она использует C # версии 5 или 6
phuclv
Это не так, поскольку C # 6.0
asaf92
6

По умолчанию ниже приведены соответствующие версии компиляторов C # для 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

Вы также можете изменить версию, пожалуйста, следуйте инструкциям ниже.

Откройте окно свойств проекта:

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"
Анкит Мори
источник
5

Из командной строки разработчика введите

csc -langversion:?

Это отобразит все поддерживаемые версии C #, включая версию по умолчанию:

1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)
fortesl
источник
5

Спасибо @fortesl и этому ответу

Я использую VS 2019, и он не может легко сказать вам версию C #, которую вы используете. Я работаю с .Net Core 3.0 и VS 2019, используя C # 8 в этой среде. Но "csc -langversion:?" проясняет это:

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

Не уверен, что 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
источник
Похоже, что OP нуждается в ответе, связанном с кодированием
bradbury9
4

Если вы используете VS2015, выполните следующие действия, чтобы узнать то же самое:

  1. Щелкните правой кнопкой мыши на проекте.
  2. Нажмите на вкладку Свойства .
  3. В окне свойств выберите опцию Build .
  4. В этом нажмите на кнопку Advance .
  5. Там вы узнаете языковую версию.

Ниже изображения показывают шаги для того же самого:

Шаг 1:

Шаг 1

Шаг 2:

Шаг 2

Сунил Джадхав
источник
3

Чтобы увидеть установленную версию компилятора VC #:

Откройте командную строку Visual Studio и просто введите csc, затем нажмите Enter.

Вы увидите что-то вроде следующего:

Компилятор Microsoft (R) Visual C # версии 4.0.30319.34209

для Microsoft (R) .NET Framework 4.5

Авторское право (C) Microsoft Corporation. Все права защищены.

PS: « CSC » расшифровывается как « C Sharp Compiler ». На самом деле с помощью этой команды вы запускаете csc.exe, который является исполняемым файлом, который находится в «c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX». Для получения дополнительной информации о CSC посетите http://www.file.net/process/csc.exe.html

Сияваш Хамди
источник
3

Для Windows вы запускаете dev в командной строке программы поиска и выбираете командную строку разработчика для VS. Тогда ты будешь просто бежать

csc

Теперь вы получаете информацию, аналогичную

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

Для Windows, и если вы начинаете с терминала CMD

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

Теперь вы видите все каталоги и файлы в .NET \ Framework \. Пожалуйста, выберите v ... latest и перейдите, например,

cd v4.0.30319

Бегать

csc

Вы увидите информацию о версии компилятора C #, которая может быть чем-то похожим на

Microsoft (R) Visual C# Compiler version 4.7.2556.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.
Римский
источник
2

Языковая версия выбирается на основе целевой структуры проекта по умолчанию.

Каждый проект может использовать свою версию .Net Framework. По умолчанию будет выбран наиболее подходящий компилятор C # с учетом целевой платформы. В Visual Studio пользовательский интерфейс не позволяет пользователям изменять языковую версию, однако мы можем изменить языковую версию, отредактировав файл проекта с добавлением новой группы свойств. Но это может вызвать проблемы компиляции / выполнения в существующем коде.

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

Я мог видеть следующее из документов Microsoft.

Компилятор определяет значение по умолчанию на основе этих правил:

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
Срикант
источник
0

Вот обзор того, как .NET Framework и версии компилятора связаны, установлены и изменены. У каждого проекта есть целевая версия (ы) .NET Framework, например, версия 3.x или 2.x. .NET Framework содержит типы и компоненты среды выполнения.

Установка версии Visual Studio и версия платформы .NET определяют совместимую версию языка c # и параметры компилятора, которые можно использовать. Версия и параметры по умолчанию для c #, используемые в проекте Visual Studio, - это последняя установленная языковая версия, совместимая с используемой версией .NET Framework.

Чтобы просмотреть или обновить язык Framework или C # в проекте в Visual Studio 2011:

  • щелкните правой кнопкой мыши проект в обозревателе решений и выберите Свойства
  • выберите «Приложение» в левой панели навигации. Под Целевой платформой: .NET Framework версия. Выберите стрелку вниз, чтобы увидеть все доступные версии платформы.

  • выберите «Построить» в левой панели навигации. В разделе «Общие» панели рядом с «Языковая версия:» используется используемая языковая версия компилятора c #, например «default» или c # 5.0.

  • выберите стрелку вниз в раскрывающемся списке «Языковая версия:», чтобы увидеть все доступные языковые версии. Если «по умолчанию» используется версия c #, будет использоваться последняя совместимая версия языка c #.

Чтобы увидеть точную версию языка компилятора для «по умолчанию», введите следующую команду в командной строке разработчика для установленной версии Visual Studio. Например, из значка «Пуск» Windows выберите значок «Командная строка разработчика для VS2011» и введите:

csc -langversion: по умолчанию

Компилятор Microsoft (R) Visual C # версии 4.7.3062.0 для c # 5

EdW
источник
0

Чтобы получить версию C # из кода, используйте этот код из документации Microsoft, чтобы получить версию .NET Framework, а затем сопоставьте ее, используя таблицу, которую упоминают все остальные. Вы можете закодировать карту версии Framework в C # в словаре или что-то еще, чтобы ваша функция возвращала версию C #. Работает, если у вас есть .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
Стека стека
источник