如何从命令行运行Roslyn代替csc.exe

本文关键字:代替 csc exe Roslyn 运行 命令行 | 更新日期: 2023-09-27 18:06:54

安装VS 2015后,从命令行运行csc.exe会导致控制台显示以下消息:

这个编译器是作为Microsoft (R) .NET框架的一部分提供的,但是只支持c# 5之前的语言版本,而c# 5已经不再是最新版本。对于支持新版本c#的编译器编程语言,参见http://go.microsoft.com/fwlink/?LinkID=533240

链接重定向到Roslyn在GitHub的仓库。
那么,是从命令行运行"支持新版本的编译器"(Roslyn)的一种方法吗?

如何从命令行运行Roslyn代替csc.exe

听起来你的路径基本上是不合适的。如果你打开"VS2015的开发人员命令提示符",你应该在路径的早期有$ProgramFiles(x86)$'MSBuild'14.0'bin -并且csc.exe在那里 Roslyn。

我怀疑你正在运行c:'Windows'Microsoft.NET'Framework'4.0.30319或类似的版本-这是遗留的一个,基本上。

Roslyn from command line('cmd'), Windows 10场景示例:
(注意:不需要安装Visual Studio,只需要。net核心)

  1. 打开cmd,创建文件夹"dotnet-csharp-tools"

    D:祝辞mkdir"dotnet-csharp-tools"

  2. 导航到文件夹"dotnet-csharp-tools";

    D:在cd"dotnet-csharp-tools"

  3. 文件夹"dotnet-csharp-tools"下载'nuget.exe'最新版本:

    https://www.nuget.org/downloads

  4. 检查"Microsoft.CodeDom.Providers"最新版本的名称。DotNetCompilerPlatform":

    https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

    例如:'Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 3.6.0'

  5. 从'cmd'(打开文件夹"dotnet-csharp-tools"),运行命令:

    D:'dotnet-csharp-tools>nuget install Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 3.6.0

  6. 从'cmd'导航到'D:'dotnet-csharp-tools'Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0'tools'Roslyn472'(警告:文件夹名称'Roslyn472'可能不同,如果是其他版本)

    D: ' dotnet-csharp-tools> cd Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0 '工具' Roslyn472

  7. 从"文件资源管理器"中找到"csc.exe"(在当前文件夹"Roslyn472"中)。复制名为"csc-roslyn.exe"的"csc.exe"(名称可以是任何名称)。

  8. 对于Windows 10,打开:

    '编辑系统环境变量' ->'系统变量' ->"路径"→"编辑"→"新"→D: ' dotnet-csharp-tools ' Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0 '工具' Roslyn472

  9. 关闭并再次打开'cmd'(命令提示符)。这个'cmd'需要重新启动,因为'系统环境变量'被编辑了。

  10. 检查'csc-roslyn'是否被'cmd'识别:

    csc-roslyn

  11. 创建文件夹'D:'csharp-projects'(文件夹名称可以是任何)并在'D:'csharp-projects'中创建c#源文件,例如:

Vehicle.cs

class Vehicle
{
    private string name = "unknown";
    private int producedYear = -1;
    public Vehicle(string name, int producedYear)
    {
        this.Name = name;
        this.ProducedYear = producedYear;
    }
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }
    public int ProducedYear
    {
        get { return this.producedYear; }
        set { this.producedYear = value; }
    }
}

Car.cs

class Car : Vehicle
{
    private string maker = "unknown";
    public Car(string name, int age, string maker)
    : base(name, age)
    {
        this.Maker = maker;
    }
    public string Maker
    {
        get { return this.maker; }
        set { this.maker = value; }
    }
    public override string ToString()
    {
        return $"{this.Name}, {this.ProducedYear}, {this.Maker}";
    }
}

Autoservice.cs

using System;
class Autoservice
{
    public static void Main()
    {
        
        Car car1 = new Car("Ford Taunus", 1971, "Ford");
        Car car2 = new Car("Opel Ascona", 1978, "Opel");
        Car car3 = new Car("Saab 900", 1984, "Saab");
        Console.WriteLine(car1);
        Console.WriteLine(car2);
        Console.WriteLine(car3);
    }
}
  • 从'cmd'(命令提示符)打开'D:'csharp-projects'并运行命令:

    csc-roslyn/target:exe/out:Autoservice.exe vehicles .cs Car.cs Autoservice.cs

  • Run from 'cmd':

    Autoservice.exe

  • 结果应该是:

  • Ford Taunus, 1971, Ford
    欧宝Ascona, 1978,欧宝
    Saab 900, 1984, Saab

    我怀疑Roslyn编译器的位置会根据你运行的Visual Studio而移动很多。

    我可以通过执行如下搜索来找到我的:

    cd "'Program Files (x86)"

    dir /s csc*.* | findstr Roslyn

    我的特定csc.exe位于:

    C:'Program Files (x86)'Microsoft Visual Studio'2019'Community'MSBuild'Current'Bin'Roslyn'csc.exe