在命令提示符下编译/执行 C# 源文件

Posted

技术标签:

【中文标题】在命令提示符下编译/执行 C# 源文件【英文标题】:Compiling/Executing a C# Source File in Command Prompt 【发布时间】:2009-02-16 12:20:36 【问题描述】:

如何从命令提示窗口编译和执行 .cs 文件?

【问题讨论】:

对于那些感兴趣的人:我编写了一个批处理文件 CompileCS.cmd,它允许您编译(和可选地运行)一个 C# 文件。它在内部使用 csc.exe 并调用在本地 PC 上找到的最新版本。你可以找到the batch program 'CompileCS' here at ***,这里我回答了如何获取最新安装的csc.exe。 【参考方案1】:

CSC.exe 是 .NET Framework 中包含的 CSharp 编译器,可用于从命令提示符进行编译。如果使用“/target:exe”,则输出可以是可执行文件“.exe”,也可以是 DLL;如果使用 /target:library,则 CSC.exe 位于 .NET Framework 目录中,

例如对于 .NET 3.5,c:\windows\Microsoft.NET\Framework\v3.5\

要运行,首先打开命令提示符,单击“开始”,然后输入cmd.exe。 然后,您可能必须 cd 进入包含源文件的目录。

像这样运行 C# 编译器:

  c:\windows\Microsoft.NET\Framework\v3.5\bin\csc.exe 
            /t:exe /out:MyApplication.exe MyApplication.cs  ...

(全部在一行上)

如果你有多个源模块需要编译,你可以把它放在同一个命令行上。如果您有其他程序集要引用,请使用/r:AssemblyName.dll

确保您在其中一个类中定义了一个静态 Main() 方法,以充当“入口点”。

要运行生成的 EXE,请使用命令提示符键入 MyApplication,然后键入 <ENTER>

MSDN 上的This article 更详细地介绍了命令行编译器的选项。您可以嵌入资源、设置图标、签署程序集——您可以在 Visual Studio 中执行的所有操作。

如果您安装了 Visual Studio,请在“开始菜单”中;在 Visual Studio 工具下,您可以打开“Visual Studio 命令提示符”,它将设置命令行编译所需的所有环境和路径变量。

虽然知道这一点非常方便,但您应该将它与某种构建工具的知识结合起来,例如NAnt、MSBuild、FinalBuilder 等。这些工具提供了一个完整的构建环境,而不仅仅是基本编译器。

在 Mac 上

在 Mac 上,语法类似,只是 C sharp Compiler 只是命名为csc

$ csc /target:exe /out:MyApplication.exe MyApplication.cs ...

然后运行它:

$ mono MyApplication.exe

【讨论】:

如果我没记错的话,只有当你有一个带有 Main 方法的静态类时,你才能编译成和 exe。 编译器最近会警告你,如果你还没有,但是很好,我会把它添加到答案中,谢谢。 这太棒了。需要编译一个小型 C# 应用程序,并且对接触 Visual Studio 没有兴趣。谢谢! 在 Win10 中,我在那里找到了我的:C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe【参考方案2】:

另一种编译 C# 程序的方法(不使用 Visual Studio 或不安装它) 就是在环境变量中创建一个用户变量,即“PATH”。

在此变量中复制以下路径:

“C:\Windows\Microsoft.NET\Framework\v4.0.30319”

或取决于您的 PC 具有哪个 .NET。

因此您不必在每次编译代码时都提及整个路径。 只需使用

“C:\Users\UserName\Desktop>csc [选项] 文件名.cs”

或者你的代码路径在哪里。

现在你可以走了。

【讨论】:

【参考方案3】:

你可以编译一个C#程序:

c:> csc Hello.cs

你可以运行程序

c:> 你好

【讨论】:

如果我使用其他库怎么办?我收到未找到程序集的错误...如何解决此问题? 您必须首先确保编译器的路径在环境变量中。 @NikasŽalias。例如。 csc Hello.cs -langversion:latest -reference:System.Net.Http.dll【参考方案4】:

对于最新版本,首先打开一个 Powershell 窗口,转到任意文件夹(例如 c:\projects\)并运行以下命令

# Get nuget.exe command line
wget https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile nuget.exe

# Download the C# Roslyn compiler (just a few megs, no need to 'install')
.\nuget.exe install Microsoft.Net.Compilers

# Compiler, meet code
.\Microsoft.Net.Compilers.1.3.2\tools\csc.exe .\HelloWorld.cs

# Run it
.\HelloWorld.exe    

HelloWorld.cs 示例

using System;

public class HelloWorld 
    public static void Main() 
    
        Console.WriteLine("Hello world!");
    

你也可以试试新的 C# 解释器 ;)

.\Microsoft.Net.Compilers.1.3.2\tools\csi.exe
> Console.WriteLine("Hello world!");
Hello world!

【讨论】:

【参考方案5】:

虽然知道如何在命令行构建绝对是一件好事,但对于大多数工作来说,使用 IDE 可能更容易。 C# express edition 是免费的,而且物有所值;-p

另外,snippy 之类的东西也可用于运行 C# 代码片段。

最后 - 请注意命令行是特定于实现的;对于 MS,它是csc;对于mono,它是gmcs 和朋友......同样,执行:它只是MS 版本的“exename”,但通常是单声道的“mono exename”。

最后,很多项目都是用构建脚本工具构建的; MSBuild、NAnt等

【讨论】:

我确实使用 IDE。但我需要知道。只是不知道感觉不对!非常感谢您的回复。 +1 为 NAnt! LINQPad 非常适合用于试验代码片段:linqpad.net【参考方案6】:

下面是如何使用独立的 C# 7.0 编译器安装 MSBuild,该编译器不再捆绑在最新的 .Net Framework 4.7 中:

Is it possible to install a C# compiler without Visual Studio?

然后运行

"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\Roslyn\csc.exe" MyApplication.cs

将单个源文件编译为可执行文件。

还要注意 .Net Core doesn't support compiling single source file 没有预配置项目。

【讨论】:

【参考方案7】:

LinqPad 是测试一些 C# 代码的快速方法,而且它是免费的。

【讨论】:

【参考方案8】:

您可以在 VS 命令提示符下构建类文件(以便加载所有必需的环境变量),而不是默认的 Windows 命令窗口。

要了解有关使用 csc.exe(编译器)构建命令行的更多信息,请参阅 this article。

【讨论】:

【参考方案9】:

添加到路径

C:\Windows\Microsoft.NET\Framework\v3.5

编译:

csc file.cs

执行:

file

【讨论】:

【参考方案10】:

一旦您编写了 c# 代码并保存它。您可以像其他代码一样使用命令提示符来执行它。

在命令提示符中输入文件所在的目录并键入

编译:

mcs yourfilename.cs

执行:

mono yourfilename.exe 

如果您希望您的 .exe 文件具有不同的名称,请键入

编译:

mcs yourfilename.cs -out:anyname.exe 

执行:

mono anyname.exe 

这应该有帮助!

【讨论】:

【参考方案11】:

在 Windows 系统中,在当前目录位于 Microsoft Visual Studio\\ 时,在命令提示符中使用命令 csc <filname>.cs

有两种方式:

使用命令提示符:

    开始 --> 命令提示符 将目录更改为 Visual Studio 文件夹,使用以下命令:cd C:\Program Files (x86)\Microsoft Visual Studio\2017\ 使用命令:csc /.cs

使用开发者命令提示符:

    开始 --> VS 2017 的开发人员命令提示符 (这里的目录已经设置为Visual Studio文件夹)

    使用命令:csc /.cs

希望对你有帮助!

【讨论】:

【参考方案12】:

如果你已经安装了 Visual Studio,那么你就有了 VS 的开发者命令提示符。您可以使用csc 命令轻松构建您的程序,并在开发人员命令提示符中使用应用程序的名称运行您的应用程序。

您可以打开开发人员命令提示符,如下所示。

开始 => VS 的开发人员命令提示符

希望这会有所帮助!

【讨论】:

你能解释一下这实际上是如何回答这个问题的吗?这对使用命令行有什么帮助? @d0rf47 您可以使用 csc 命令轻松构建您的程序,并在开发人员命令提示符下使用应用程序的名称运行您的应用程序。在发表评论和投票之前,您至少阅读过答案吗?我想知道两个人是如何发现这很有帮助的。 我当然读了。我只是觉得它没有帮助或清晰 @d0rf47 好的。感谢您的反馈:)【参考方案13】:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Roslyn

在这里您可以找到支持 c#7 的 c# 编译器,否则它将使用仅支持 c# 5 的 .net 4 编译器

【讨论】:

【参考方案14】:

PowerShell 可以执行开箱即用的 C# 代码。

编译和执行文件的一个衬垫:

(Add-Type -Path "Program.cs" -PassThru)::Main() #'Main' is the entry point

假设你有一个这样的 .cs 文件:

using System;
public class Program

    public static void Main()
    
        Console.WriteLine("Hello from C#");
    

【讨论】:

【参考方案15】:
dotnet

这太糟糕了。但是,由于这是您最终成为初学者的地方,当您提出问题以了解如何在控制台中使用没有 Visual Studio CE 的编译器使用 C#(如 C 或 C++)(如果您尚未使用 C#,强烈建议您使用它)最终在 .NET 框架、库和 SDK 的术语中变得更加困惑。 如果像你这样的人作为一个完整的初学者偶然发现我的答案:

1.了解Framework和SDK的区别。

2.了解什么是 C#,什么是 .NET。

3. 这个:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/intro

你会在路上捡起剩下的。 但我建议不要使用框架,而是使用 SDK 并且主要坚持使用 VS。至于我,我学习 C# 是为了统一,主要是游戏开发。

Google 也是您的朋友。 s,保持好奇心。

【讨论】:

【参考方案16】:

如果您设置了正确的系统和环境变量并且您的路径配置正确,我找到了一种简单的方法。

只需要在项目目录下运行即可

dotnet new console --> 这将生成所需的文件,例如 .csproj。它还会生成一个 Program.cs 文件,它会自动用作入口点,如果您有其他文件使用静态 Main 方法,您可以删除此文件,它应该会自动找到 Main 入口点。

那么你需要做的就是运行 dotnet run 应该会自动编译运行

这就是我设法让我的项目使用 gitbash 作为我的终端在 vs 代码中工作的方法。我还安装了 VS 2019,我使用了 .net 5.0 框架作为我的系统变量。这是我为基本控制台程序找到的最简单的解决方案。它还允许您在 .csproj 文件中添加自定义导入

【讨论】:

【参考方案17】:
# File    : csharp.ps1
# Purpose : Powershell Script to compile a csharp console application from powershell prompt

try 
    # CSharp Compiler
    #$csc = "C:\Windows\Microsoft.NET\Framework\v3.5\bin\csc.exe"
    $csc = "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
    # NOTE: if this path doesn't work search Framework folder for csc.exe

    $ErrorActionPreference = 'Stop'

    if ($args.Count -eq 0) 
        write-host "`nUSAGE: csharp.ps1 (console_application.cs)"
        exit 1
    

    $file = $args[0];
    if (-not(test-path $file)) 
        throw "file doesn't exist: $file"   
    
    
    $cmd = "$csc /nologo  /t:exe  /out:$file.exe $file"

    write-host  -ForegroundColor Green "`nx: $cmd"
    invoke-expression $cmd  
   
catch  
    write-host -ForegroundColor Red "`nEXCEPTION: $_"

finally 
    write-host ""

// File: helloworld.cs
using System;

namespace MyProgram

    class Program
    
        public static void Main(string[] args)
        
            Console.Write("Hello World...");
            Console.ReadKey(true);
        
    

PS> .\csharp.ps1 helloworld.cs

【讨论】:

以上是关于在命令提示符下编译/执行 C# 源文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在命令提示符下编译运行含有Package的java文件

在命令提示符下编译 .Net Framework 项目给出 CS0006 而 Visual Studio 中没有错误,为啥?

linux下编译sqlite3

MuPDF怎么在windows环境下编译

Windows下编译Libevent

CentOS 6下编译安装MySQL 5.6