在命令提示符下编译/执行 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\
使用开发者命令提示符:
开始 --> 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# 源文件的主要内容,如果未能解决你的问题,请参考以下文章
在命令提示符下编译 .Net Framework 项目给出 CS0006 而 Visual Studio 中没有错误,为啥?