【问题标题】:How to run Roslyn instead csc.exe from command line?如何从命令行运行 Roslyn 而不是 csc.exe?
【发布时间】:2015-08-07 10:45:03
【问题描述】:

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

此编译器作为 Microsoft (R) .NET Framework 的一部分提供, 但仅支持最高 C# 5 的语言版本,这不再是 最新版本。对于支持较新版本 C# 的编译器 编程语言,见 http://go.microsoft.com/fwlink/?LinkID=533240

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

【问题讨论】:

  • 你在运行哪个csc.exe?它报告什么版本号?当我从命令行运行 csc.exe 时 - 使用 VS2015 的开发人员命令提示符 - 我看到版本 1.0.0.50618,那就是 Roslyn。
  • @JonSkeet:我正在从“%Windir%\Microsoft.NET\Framework64\v4.0.30319”运行csc。我没有使用开发人员命令提示符的批处理文件,它只是一个没有任何特殊设置的 cmd。
  • 那么我建议你改用 msbuild 中的csc :) 看我的回答。如果你想运行开发者命令,使用开发者命令提示符感觉是个明智的选择……
  • 这不是完全重复的,但请查看这个问题 - stackoverflow.com/questions/31698319/csc-version-at-computer/…

标签: c# visual-studio-2015 roslyn .net-4.6


【解决方案1】:

听起来你的路径不合适,基本上。如果您打开“VS2015 的开发人员命令提示符”,您应该在路径的前面有 $ProgramFiles(x86)$\MSBuild\14.0\bin - 并且其中的 csc.exe Roslyn。

我怀疑您正在运行 c:\Windows\Microsoft.NET\Framework\4.0.30319 或类似版本的版本 - 基本上是旧版本。

【讨论】:

  • 感谢新编译器所在的路径。我真的尝试过搜索它,但没有任何成功。
  • 技术上它不是 %ProgramFilesx86%,应该是 %ProgramFiles(x86)%
  • @nrudnyk:已修复。
  • 如果没有安装 Visual Studio 怎么办?有没有办法单独安装 Roslyn 编译器?
  • 我做了更多的挖掘,发现你可以只安装 Visual Studio 的构建工具:go.microsoft.com/fwlink/?linkid=840931 你仍然通过 Visual Studio 安装程序,但这不会安装 VS Shell或任何重量级的东西。您只剩下一个指向开发人员命令提示符和 PATH 上的 CSC 的链接,这正是我想要的。 :-)
【解决方案2】:

Roslyn 来自命令行('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\tools\Roslyn472

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

  8. 对于“Windows 10”,打开:

    '编辑系统环境变量' -> '系统变量' -> “路径”->“编辑”->“新建”-> D:\dotnet-csharp-tools\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.3.6.0\tools\Roslyn472

  9. 关闭并再次打开“cmd”(命令提示符)。 需要重新启动此“cmd”,因为已编辑“系统环境变量”。

  10. 通过运行命令检查'csc-roslyn'是否被'cmd'识别:

    csc-罗斯林

  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);
    }
}
  1. 从 'cmd'(命令提示符)打开 'D:\csharp-projects' 并运行命令:

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

  2. 从“cmd”运行:

    Autoservice.exe

  3. 结果应该是:

福特 Taunus,1971 年,福特
欧宝 Ascona, 1978, 欧宝
萨博 900, 1984, 萨博

【讨论】:

  • 独立 Roslyn 编译器安装 - 谢谢,如果有人尝试上述命令并且 nuget 安装失败(404,未找到),请使用以下命令。 nuget install Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 3.6.0 -Source https://api.nuget.org/v3/index.json -Source 选项允许使用 V3 nuget 端点而不是 V2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 2012-11-30
  • 1970-01-01
  • 2021-03-21
  • 2016-02-23
  • 1970-01-01
  • 2014-06-14
相关资源
最近更新 更多