Короткий ответ заключается в том, что у вас неправильное отношение: csc.exe
зависит от Рослин, а не наоборот.
Длинный ответ требует краткого урока истории:
Первоначально в среде .NET csc.exe
был автономным двоичным файлом, отвечающим за компиляцию исходного кода C# в IL. Но он был непрозрачным, а его интерфейс командной строки ограничивал то, чего можно было добиться, вызывая его.
Microsoft представила пространство имен и классы System.CodeDom
как способ для собственных инструментов генерировать код (например, конструктор Windows Forms в Visual Studio), но почти все начали его использовать, потому что оно было намного лучше, чем csc.exe
. Однако, учитывая то, для чего он был создан, CodeDOM страдает от многочисленных ограничений и пограничных случаев, которые делают его менее чем идеальным для определенных задач, не связанных с компиляцией, и в конце концов он просто вызывает csc.exe
для создания скомпилированного кода.
В конечном итоге этот подход не смог удовлетворить собственные потребности Microsoft в улучшении статического анализа кода в их флагманской IDE. Для выполнения этого требования требовался новый API, и в Microsoft поняли, что если они сделают его доступным для обычных разработчиков, то смогут убить двух зайцев одним выстрелом. Так родился проект Roslyn: полный набор независимых и полных API-интерфейсов, которые может использовать любой, тем самым удовлетворяя потребности как разработчиков, так и Visual Studio.
Конечным результатом является то, что вся логика, существовавшая в версии csc.exe
, была перенесена в API-интерфейсы Roslyn и способ вызова этих API определяет, какая версия языка C# будет использоваться. Передача -langversion
в csc.exe
или /p:TargetFrameworkVersion
в msbuild.exe
в конечном итоге приводит к установке языковой версии Roslyn для компиляции, но ничто не мешает вам создать собственный экземпляр компиляции Roslyn для достижения того же самого.
Ссылка: https://stackoverflow.com/a/7854697/70345
person
Ian Kemp
schedule
24.09.2019
csc.exe
. - person Bradley Uffner   schedule 24.09.2019csc.exe
, связанный с версией .NET. Roslyn можно скачать отдельно с помощьюnuget.exe
и запускать из любого места. - person Aaron Beaudoin   schedule 24.09.2019csc.exe
в моем каталоге Roslyn может построить мою программу без вызова черезmsbuild
? Он должен каким-то образом автоматически находить версию .NET framework для использования, поскольку я установил Roslyn отдельно от .NET и потому что в моей системе доступно несколько версий .NET. По логике вещей, разве я не могу напрямую контролировать это поведение? - person Aaron Beaudoin   schedule 24.09.2019