1、编译 C# 类

1.1、C# 编译工具

csc.exe 是 Microsoft .NET Framework 中的 C# 编译器,它支持很多编译选项。在 cmd 中键入csc /help,然后回车即可看到所有的 Visual C# 编译器选项和说明。

csc.exe 中有 6 个带默认值的选项。其中/out:<文件>选项用于指定输出文件名,可指定多个文件名甚至可以用通配符,默认取包含主类(含 Main 方法的类)的文件或第一个文件的基名称(不含后缀);而/target:exe选项表示生成控制台可执行文件,即默认生成以 exe 为后缀的可执行文件,该选项可缩写为/t:exe

我通过百度大致的检索了一下,发现大量关于 csc 的报错问题居然是“csc 不是内部或外部命令……”。如果你看了本系列前面几篇博文,相信你一眼就能看出这显然不是一个有关 .NET 的问题,而是 Windows 的基础问题。所有在这儿我还是简单提一下,如果你恰好遇到这个问题,有如下两个办法:

  • 第一个,把你本机的 .NET 主目录加入到 path 环境变量中去,然后就可以通过 cmd 调用 csc 了。
  • 第二个,找到你本机安装的 Visual Studio 中提供的开发人员命令提示符工具(每个版本的 VS 都有提供,尽管路径不一样,但在开始菜单的 Visual Studio Tools 里面一般都能找到),它主要也就是提前帮你设置好了工具的执行路径。

1.2、编译一个 C# 类

第一步,将如下 C# 代码保存为D:\Workspace\SayHello.cs文件。

public class SayHello
{
public static void Main(string[] args)
{
System.Console.WriteLine("你好,C#");
System.Console.ReadKey();
}
}

第二步,在命令行中键入csc sayhello.cs后回车即可完成编译。如下图所示:

编译完成之后,你会发现 D:\Workspace 目录下多了一个 SayHello.exe 文件,双击它的效果如下:

至于编译生成的文件名为什么是 SayHello.exe,上一小节已经讲过了。这里要说的是,假如你想让它生成一个你指定名称的可执行文件,比如指定为 chinese.exe 的话,那么你需要键入csc /out:chinese.exe sayhello.cs命令并回车即可。

1.3、编译多个 C# 类

第一步,将如下 C# 代码保存为D:\Workspace\SayHello.cs文件。

public class SayHello
{
public static void Main(string[] args)
{
System.Console.WriteLine("你好,C#");
Test.Try(); // 调用 Test 类中的 Try 方法
System.Console.ReadKey();
}
}

将如下 C# 代码保存为D:\Workspace\Test.cs文件。

public class Test
{
public static void Try()
{
System.Console.WriteLine("Just a try!");
}
}

第二步,在命令行中键入csc sayhello.cs test.cs后并回车,再次双击 SayHello.exe 文件,效果如下:

再补充几个命令:

  • csc /out:say.exe sayhello.cs test.cs表示将 sayhello.cs 和 test.cs 两个类文件编译成 say.exe 文件。
  • csc /out:sayall.exe *.cs表示将当前目录下的所有 C# 类文件编译成 sayall.exe 文件。
  • csc /utf8output *.cs表示将当前目录下的所有 C# 类文件按 UTF-8 编码来编译输出。
  • csc /target:library test.cs表示将 test.cs 类文件编译成 Test.dll 文件。
  • csc /target:library /out:say.dll *.cs表示将当前目录下的所有 C# 类文件编译成 say.dll 文件。

2、编译 Java 类

2.1、Java 编译工具

Java 的开发工具包是 JDK,在 JDK 中有用于编译 Java 的工具 javac.exe,还有用于运行 Java 的工具 java.exe 等。javac 和 java 都有很多选项,且它们都有一个默认的参数-help,这意味着如果你想了解它们全部的选项和说明,直接在 cmd 中键入工具名 javac 或 java 并回车即可。

事实上编译 Java 类比编译 C# 类要相对复杂一些。首先,javac.exe 会把 Java 代码编译成 class 文件,而不是可执行程序,这就意味着你还需要额外的工具(java.exe)来运行 Java 程序。其次,JDK 对编码格式的处理不太好,常需要手工指定。再次,在调用 class 文件的时候,你必须确保大小写完全一致,而且不能带 class 后缀,否则就会报错。

所以对初学者而言,通过命令行编译 Java 代码可能会遇到更多各种各样的问题。同样令人遗憾的是,网上关于“javac 不是内部或外部命令……”的问题也非常多,如果你遇到这个问题请仔细检查你本机的 JDK 是否安装成功,以及环境变量是否配置正确。

2.2、编译 Java 类

第一步,将如下 Java 代码保存为D:\Workspace\SayHello.java文件。

public class SayHello{
public static void main(String[] args){
System.out.println("你好,Java");
}
}

第二步,在命令行中键入javac -encoding utf8 sayhello.java后回车即可完成编译。如下图所示:

上述命令中的-encoding参数理论上不是必须的,但实际上几乎就是必须的。因为 javac.exe 会根据当前操作系统的默认编码格式来转化程序代码(忽略文件编码格式)。众所周知 Windows 中默认编码是 ANSI,对应到中国就是 GBK,而大多数文本编辑器默认都是 UTF-8,所以如果你不指定-encoding参数的话编译时就会报“编码GBK的不可映射字符”的错误。

第三步,在命令行中键入java SayHello后回车,效果如下所示:

上述命令中一定要注意大小写一致的问题,而且不能带 class 后缀,否则就会报错。另外,编译多个 Java 类与编译多个 C# 类的思路完全一样,这里就不再赘述了。

3、组合命令符

在本系列前面几篇文章中已陆续出现了大部分命令行特殊字符。如:命令行回显屏蔽符 @、批处理变量引导符 %、转义字符 ^、通配符 *、字符串界定符 "(双引号)、命令界定符 '(单引号)、重定向符 > 和 >>、命令管道符 | 等。本节再来说说命令行中的三个组合命令符 &、&& 以及 ||。

如下脚本(当命令正确运行到此处时,将逐行依次输出 a、b、c):

if errorlevel==0 (
echo a
echo b
echo c
)

上述脚本还可以改写成:

if errorlevel==0 (echo a & echo b & echo c)

或:

if errorlevel==0 (echo a && echo b && echo c)

&的语法是:第一条命令 & 第二条命令 [& 第三条命令...],表达式中的所有命令都将被执行,即便前面的命令执行失败了,后面的命令也依旧会被执行。

&&的语法是:第一条命令 && 第二条命令 [&& 第三条命令...],表达式中的命令将依次被执行,如果遇到错误将不再执行后面的命令,只有执行一直不出错的情况下才会执行完所有命令。

如果把前面那个脚本改写成(则只会输出 a):

if errorlevel==0 (echo a || echo b || echo c)

||的语法是:第一条命令 || 第二条命令 [|| 第三条命令...],与 && 恰恰相反的是,仅当 || 前面的命令执行执行失败时才会执行后面的命令。如果第一条命令执行成功就只会执行第一条命令,当第一条命令执行失败后才会执行第二条命令,只有当前面的所有命令都执行失败时,才会执行到最后一条命令。

额外补充:本系列前几篇博文中多次出现echo.,它的作用是返回一个空行。需要注意的是 echo 和后面的点得紧挨着,中间不能有空格,否则就会直接输出点了。其实 echo 后面的点还可以用逗号(,)、分号(

探索Windows命令行系列(7):通过命令编译C#类和Java类的更多相关文章

  1. 探索Windows命令行系列(3):命令行脚本基础

    1.实用功能 1.1.为脚本添加注释 1.2.控制命令的回显 1.3.使用数学表达式 1.4.向脚本传递参数 2.使用变量 2.1.变量的命名及定义 2.2.调用变量 2.3.变量的作用域 3.结构语 ...

  2. 探索Windows命令行系列(2):命令行工具入门

    1.理论基础 1.1.命令行的前世今生 1.2.命令执行规则 1.3.使用命令历史 2.使用入门 2.1.启动和关闭命令行 2.2.执行简单的命令 2.3.命令行执行程序使用技巧 3.总结 1.理论基 ...

  3. 探索Windows命令行系列(5):几个实用的命令例解

    1.关机命令(shutdown) 2.管理 Windows 服务(sc) 3.管理任务进程(tasklist.taskkill) 4.显示 TCP/IP 配置值(ipconfig) 5.网络诊断工具( ...

  4. 探索Windows命令行系列(1):导航目录

    探索Windows命令行系列(1):导航目录 探索Windows命令行系列(2):命令行工具入门 探索Windows命令行系列(3):命令行脚本基础 探索Windows命令行系列(4):通过命令操作文 ...

  5. windows下命令行模式中cd命令无效的原因

    当我们执行cmd 想切换当前工作目录时,会发现windows下命令行模式中cd命令没有生效,到底是什么原因呢? 例如: 当我们想切换到 D:\MySql\mysql-5.7.19-winx64\bin ...

  6. Windows命令行command的Shell命令详细解析和语法

    CMD命令大全及详细解释和语法 Microsoft Windows XP [版本 5.1.2600] 有关某个命令的详细信息,请键入 HELP 命令名 ASSOC    显示或修改文件扩展名关联. A ...

  7. 韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案

    命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备 ...

  8. linux命令行下svn常用命令

    linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...

  9. PHP调用Linux的命令行执行文件压缩命令&&创建文件夹修改权限

    一开始,我和普通青年一样,想到用PHP内置的 ZipArchive纠结的是环境上没安装zip扩展,想采用用PHP调用Linux的命令行 ,执行压缩命令,感兴趣的朋友可以了解下,希望本文对你有所帮助 前 ...

  10. cmd命令行中无pip命令的解决办法

    cmd命令行中无pip命令的解决办法 只需简单的两步即可,按顺序执行以下命令(在cmd中): python -m ensurepip python -m pip install --upgrade p ...

随机推荐

  1. js事件中的event对象

    addEvent(oDiv,"click",function(event){ console.log(event.bubbles+"事件是否冒泡"); cons ...

  2. 将非官方扩展程序加入chrome的白名单

    参考来源:http://xclient.info/a/1ddd2a3a-d34b-b568-c0d0-c31a95f0b309.html com.google.Chrome.mobileconfig ...

  3. .Net程序员学用Oracle系列(29):PLSQL 之批量应用和系统包

    1.批量数据操作 1.1.批量生成数据 1.2.批量插入数据 2.批量生成脚本 3.生成数据字典 4.常见系统包 4.1.DBMS_OUTPUT 4.2.DBMS_RANDOM 4.3.其它系统包及常 ...

  4. 使用FileUtils简化你的文件操作

    前言: 在工作当中我们往往遇到很多文件的操作,我们也习惯写一些自己定义的工具类来简化文件操作,其实apache的commons的FileUtils类就是这样一个工具类,使用它能大大的简化我们对文件的操 ...

  5. 第1 章MySQL 基本介绍

    第 1 章 MySQL 基本介绍   前言: 作为最为流行的开源数据库软件之一,MySQL 数据库软件已经是广为人知了.但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介 ...

  6. Flume简介及安装

    Hadoop业务的大致开发流程以及Flume在业务中的地位: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步,从而引出我们本文的 ...

  7. 深入理解Java常用类-----时间日期

    除了String这个类在日常的项目中比较常用之外,有关时间和日期的操作也是经常遇到的,本篇就讲详细介绍下Java API中对时间和日期的支持.其实在Java 8之前时间日期的API并不是很好用,以至于 ...

  8. 1.Java第一课:初识java

    今天也算是正式地开始学习Java了,一天学的不是太多,旨在入门了解Java.还好现在学的都是基础,也能赶得上进度,希望以后能一直保持这种精神状态坚持学下去.下面就简单来说说今天所学的内容吧. 1计算机 ...

  9. vue2.0+element+node+webpack搭建的一个简单的后台管理界面

    闲聊: 今天是六一儿童节哟,小颖祝大家节日快乐哈哈哈.其实这个demo小颖断断续续做了将近两个礼拜了,心塞的,其实这个也没有多难,主要是小颖有点最近事情有点多,所以就把这个一直拖着,今天好不容易做好了 ...

  10. jQuery总结---版本一

    day01--- jQuery是一个函数库,简化了DOM操作,屏蔽了浏览器兼容性问题.函数分为4类 (1)DOM操作 (2)事件处理 (3)动画 (4)AJAX jQuery3的新特性有哪些? 1. ...