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

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

【问题讨论】:

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

标签: c# command-line compilation command-prompt


【解决方案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 命令提示符”,它将设置命令行编译所需的所有环境和路径变量。

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

在 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”。

      最后,很多项目都是用构建脚本工具构建的; MSBuildNAnt

      【讨论】:

      • 我确实使用 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

                有两种方式:

                使用命令提示符:

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

                使用开发者命令提示符:

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

                2. 使用命令: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
                          

                          【讨论】:

                            猜你喜欢
                            • 2017-01-20
                            • 1970-01-01
                            • 2011-10-26
                            • 1970-01-01
                            • 2014-01-18
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多