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


Answers:


140

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

例如.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上的本文详细介绍了命令行编译器的选项。您可以嵌入资源,设置图标,对程序集进行签名-您可以在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

1
如果我没记错的话,如果您有一个带有Main方法的静态类,则只能编译为exe。
cjk

这些天,编译器会向您发出警告(如果没有的话),但是很高兴我将其添加到答案中,谢谢。
灰烬

5
这太棒了。需要编译一个小型C#应用程序,并且对接触Visual Studio没有兴趣。谢谢!
ColinM

1
在Win10中,我在那里找到了我:C:\Program Files (x86)\MSBuild\14.0\Bin\csc.exe
TrakJohnson,2016年

17

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

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

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

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

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

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

或代码路径在哪里。

现在你很好。


15

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

c:> csc Hello.cs

您可以运行该程序

c:>您好


1
如果我使用其他库怎么办?我收到未找到程序集的错误。如何解决此问题?
NikasŽalias18年

您必须首先确保编译器的路径在环境变量中。
林格夫人(Dame Lyngdoh)

@NikasŽalias。例如csc Hello.cs -langversion:latest-reference:System.Net.Http.dll
Alex Nolasco

8

对于最新版本,首先打开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!

7

虽然知道如何在命令行中进行构建绝对是一件好事,但是对于大多数工作而言,使用IDE可能会更容易。C#速成版是免费的,而且非常物有所值;-p

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

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

最后,许多项目都是使用构建脚本工具构建的。MSBuildNAnt


3
我确实使用IDE。但是我需要知道。不知道真是不对劲!非常感谢您的回复。
DragonBorn

1
NAnt +1!LINQPad非常适合尝试代码片段:linqpad.net
TrueWill 2010年


5

LinqPad是测试一些C#代码及其免费版本的快速方法。


2

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

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


2

如果已安装Visual Studio,则将具有VS的Developer Command Prompt。您可以使用csc命令轻松构建程序,并在开发人员命令提示符下使用应用程序名称运行应用程序。

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

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

希望这可以帮助!



1

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

在命令提示符下,输入文件所在的目录,然后键入

编译:

mcs yourfilename.cs

执行:

mono yourfilename.exe 

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

编译:

mcs yourfilename.cs -out:anyname.exe 

执行:

mono anyname.exe 

这应该有所帮助!


1

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

有两种方法:

使用命令提示符:

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

使用开发人员命令提示符:

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

  2. 使用命令:csc /.cs

希望能帮助到你!


0

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

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



0

我已经编写了一个批处理文件CompileCS.cmd,该文件允许编译(和可选地运行)C#文件,您可以在此处找到完整的答案,包括批处理程序“ CompileCS”

它的用法很简单:

CompileCS /run GetDotNetVersion.cs[arg1] ... [arg9]

将编译并运行GetDotNetVersion.cs-如果只想编译它,则省略该/run参数。

控制台应用程序GetDotNetVersion.cs就是从此答案中获取的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.