简体   繁体   中英

How to run Roslyn instead csc.exe from command line?

After installing VS 2015, running csc.exe from command line causes this message to be displayed to console:

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

The link redirects to Roslyn's repository at GitHub.
So, is the a way to run "compilers that support newer versions" (Roslyn) from command line?

It sounds like your path is inappropriate, basically. If you open the "Developer Command Prompt for VS2015" you should have $ProgramFiles(x86)$\\MSBuild\\14.0\\bin early in your path - and the csc.exe in there is Roslyn.

I suspect you're running the version in c:\\Windows\\Microsoft.NET\\Framework\\4.0.30319 or similar - which is the legacy one, basically.

Roslyn from command line('cmd'), Windows 10 scenario example:
( Note: No need Visual Studio installed, but only the .NET core )

  1. Open 'cmd' and create folder "dotnet-csharp-tools":

    D:>mkdir "dotnet-csharp-tools"

  2. Navigate to folder "dotnet-csharp-tools":

    D:>cd "dotnet-csharp-tools"

  3. In folder "dotnet-csharp-tools" download 'nuget.exe' latest version from:

    https://www.nuget.org/downloads

  4. Check name of the last version of 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform' from:

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

    For example: 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 3.6.0'

  5. From 'cmd'(opened folder "dotnet-csharp-tools"), run command:

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

  6. From 'cmd' navigate to 'D:\\dotnet-csharp-tools\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\\tools\\Roslyn472'(warning : folder name 'Roslyn472' may be different, if is other version)

    D:\\dotnet-csharp-tools>cd Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\\tools\\Roslyn472

  7. From 'File explorer' find 'csc.exe'(in the current folder 'Roslyn472'). Make copy of 'csc.exe' with name 'csc-roslyn.exe'(name can be whatever).

  8. For 'Windows 10', open:

    'Edit system environment variables' -> 'System variables' -> 'path' -> 'Edit' -> 'New' -> D:\\dotnet-csharp-tools\\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\\tools\\Roslyn472

  9. Close and open again 'cmd'(the command prompt). This 'cmd' restart needed, because 'system environment variables' are edited.

  10. Check if 'csc-roslyn' is recognized by 'cmd' by run command:

    csc-roslyn

  11. Create folder 'D:\\csharp-projects'(folder name can be whatever) and create in 'D:\\csharp-projects' C# source files, for example:

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);
    }
}
  1. Open 'D:\\csharp-projects' from 'cmd'(the command prompt) and run command:

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

  2. Run from 'cmd':

    Autoservice.exe

  3. Result should be:

Ford Taunus, 1971, Ford
Opel Ascona, 1978, Opel
Saab 900, 1984, Saab

I suspect the location of the Roslyn compiler moves around a lot based on the Visual Studio you're running.

I was able to find mine by performing a search like this:

cd "\Program Files (x86)"

dir /s csc*.* | findstr Roslyn

My particular csc.exe was located in:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM