如何在 macOS 上的 Sublime Text 3 上 运行 C#?

How to Run C# on Sublime Text 3 on macOS?

我正在尝试 运行 macOS 上的 C#,在 自动模式 下使用 Sublime Text 3:

> Tools > Build System > Automatic

并建立了一个系统:

{
    "cmd": ["csc $file && $file_base_name"],
    "shell": true,
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)",
    "selector": "source.cs",
    "quiet": true
}

Sublime Text 3/Packages/Users/CSharp.sublime-build中基于this article.

我用 CMD+B:

测试过
using System;

class re{
  public static void Main(){
    Console.WriteLine("Hello world");
  }
}

哪个returns:

/bin/sh: csc: command not found

我不确定如何解决这个问题,查看了一些相关帖子 such as this,但还是想不通。我该如何解决?


其他信息

$ which dotnet
/usr/local/share/dotnet/dotnet

$ dotnet --version
2.2.401

$ ls /usr/local/share/dotnet/shared/Microsoft.NETCore.App/
2.2.6

如果您正在使用 dotnet core(从您的问题中可以看出),您需要使用 dotnet 来执行代码而不是 csc;那是 .NET 的编译器(这些东西的命名法和奇怪的命名让我有点头疼)。

作为一个粗略的过度简化,dotnet 核心使用名为 dotnet 的命令对项目进行编译和 运行,而 .NET 使用 msbuild 到 运行 构建并使用 csc 作为底层编译器。要使用这些命令,您需要安装诸如 Mono 之类的东西(或者 .NET 4 的官方 MacOS 版本或您拥有的东西,假设存在这样的东西)。

我个人用于此类事情的构建系统是:

{
    "working_dir": "${folder:${project_path:${file_path}}}",
    "selector": "source.cs",

    "variants":
    [
        {
            "name": "Build",
            "shell_cmd": "dotnet build",
            "word_wrap": false,
            "quiet": true,
        },
        {
            "name": "Clean",
            "shell_cmd": "dotnet clean"
        },
        {
            "name": "Run",
            "shell_cmd": "dotnet run"
        },
        {
            "name": "Run Interactive",
            "cmd": ["dotnet", "run"],
            "target": "terminus_open",
            "auto_close": false,
        }
    ],
}

这会设置一个具有多个变体的构建系统,允许您选择构建干净的或 运行 程序。如果在构建时不选择变体,命令将失败,因为顶级构建不包含任何构建任何命令。

在这种情况下,这是因为使用 Terminus 包的最后一个变体允许 运行ning 交互式程序。 Terminus 仅支持 cmd 而我更喜欢使用 shell_cmd,因此顶级构建需要没有隐式命令。

另一种方法是放弃 Terminus 变体或将所有其他变体转换为使用 cmd。在这种情况下,您可以将最常见项目(例如 Run 变体)的命令移动到顶层,这样 运行 程序就是默认的。

最后一点,要使构建系统正常工作,前提是您在一个文件夹中工作,您已在该文件夹中使用适当的 dotnet 命令创建了一个空项目。我不知道是否有办法在该上下文之外使用 dotnet 执行单个临时 C# 文件。

试试这个:)
我刚开始使用 C# 的 class,当然,讲师的评分是 Visual Studio..
我自己犯了错误正则表达式,因为我在网上找不到任何内容:)

{
    "cmd":      [   "mcs '$file' && mono $file_base_name.exe"   ],
    "shell":        true,
    // error regex credits to Simon | github.com/mightbesimon
    "file_regex":   "^(..[^(]*?)\(([0-9]*),([0-9]*)\):? (.*)$",
    "selector":     "source.cs"
}