Как определить версию компилятора C# в командной строке

есть ли команда для получения версии компилятора C#? The csc командные швы не имеют возможности отображать версию компилятора.

П. С. когда я войду на Командная строка разработчика для VS2015 возвращает:

Microsoft (R) Visual C# Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

однако я уверен, что мой компилятор C# новее 1.3!

2 ответов


имейте в виду, что у вас будет как минимум 2 версии csc.exe на вашем компьютере. Один поставляется как часть установки .NET Framework, как это всегда было, и следует нумерации версий платформы. Хранится в c:\windows\microsoft.net\framework\v4.0.30319, он сохраняется там для совместимости с системой.CodeDom и sgen.исполняемый. Замерли на языке C# версии 5. Большинство программистов прямо сейчас будут иметь версию 4.7.X. 0, когда у них есть .NET v4.7 на их машина.

другой был отключен как часть проекта Roslyn и хранится в каталоге MSBuild. С сбросом номера версии, который снова начинает нумерацию с 1. Вы запустите его при использовании командной строки разработчика. Наиболее вероятной причиной сброса номера версии является их желание не заблокироваться в каденции выпуска фреймворка, Рослин страдала от очень большого количества ошибок, которые требовали промежуточных релизов для исправления. Примечательной проблемой к развязке было добавлено новое значение типа ValueTuple в C# v7, требуемое значительно улучшенной поддержкой кортежа. Компилятор был отправлен до того, как платформа была доступна, и программистам пришлось вернуться к использованию пакета Nuget на некоторое время.

сброс номера версии происходит не очень часто. Но есть еще один хороший пример, о котором все знают .NETCore, он получил сброс с 5.0 обратно в 1.0. Я никогда не видел твердого оправдания для этого за пределами "избегает путаницы" , я думаю, что это было двигайтесь, чтобы он выглядел свежим.


как буквальный ответ на вопрос new-ish [обновление: версии roslyn выше 2, см. комментарий Кэмерона Макфарланда] версии csc имеют переключатель / version:

c:\>csc /version 
2.3.2.62116 (8522b473)

для сценариев (если вы хотите включить версию, скажем), этого может быть достаточно, наряду с тестированием %errorlevel% of csc /version разместить в слишком старое ведро.

/version однако не появляется на https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/listed-alphabetically (который кажется новейшей версией), и я не могу найти ничего, перечисляющего, в какой версии он был добавлен.

обновление: я также был бы очень осторожен с номером версии, сообщенным csc, например, мой личный "default" находится в C:\Program Files (x86)\Microsoft Visual Studio17\Professional\MSBuild.0\Bin\Roslyn и вариант 2.3.2.62116 (и дата файла 22/9/2017), но у меня также есть C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe С версии 4.7.2046.0 (и дата файла 18/03/2017) (и который не принимает переключатель /version).

в ответ

есть ли команда для получения версии компилятора C#?

Я бы сказал, Да, возможно, иногда, но я бы относиться к этой версии с щепоткой соли, глядя на штампы версии у меня есть версия сообщается версия файла csc.exe-сборка, которая, по-видимому, исходит из версии "большей сущности", которая скомпилировала csc, и есть по крайней мере несовместимые схемы нумерации для компиляторов Rosyln и "традиционных".