• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

用CSC.exe来编译VisualC#的代码文件,解释CSC参数和开关的具体作用 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Visual C#的编译器和以往编程语言的编译器有着明显的不同。其最大的不同点就是,以往的程序编译器是把编写好的程序代码编译生成可以直接为计算机所使用的机器语言。虽然Visual C#的编译器也可以把编写好的程序代码编译成EXE或者是DLL文件,但这种文件只是一种IL文件(中间语言),此IL文件不能直接被计算机使用。只是当此IL文件被调用的时候,再通过一种名叫JIT(即时编译)编译器把此IL文件生成可以供计算机使用的机器代码。

  可见Visual C#的编译过程大致可以分成二个部分,第一个部分,从程序代码到IL文件,这个过程是通过人工干预来实现的,即通过CSC.exe来实现的;第二个部分,从IL文件到机器语言,这个工程是机器自动实现的。本文就将具体来说明一下第一个部分,即如何用CSC.exe来正确编译Visual C#文件。

  CSC.exeVisual C#程序代码编译成IL文件时,有着很多参数和开关选项。正确的了解和运用这些参数和开关有时会解决一些看似很棘手的问题。下面就通过一张表来大致说明一下这些参数和开关的具体作用。这些参数和开关选项是按照字母顺序来排列的。其中带"*",是一些常用的参数或开关。

选项  用途
@ * 
指定响应文件。

/?, /help
在控制台的计算机屏幕上显示编译器的选项

/addmodule
指定一个或多个模块为集会的一部分

/baseaddress
指定装入DLL的基础地址

/bugreport
创建一个文件,该文件包含是报告错误更加容易的信息

/checked
如果整数计算溢出数据类型的边界,则在运行时产生一个例外的事件

/codepage
指定代码页以便在编译中使用的所有源代码文件

/debug *
发送调试信息

/define
定义预处理的程序符号

/doc *
把处理的文档注释为XML文件

/fullpaths
指定编译输出文件的反正路径

/incremental
对源代码的文件进行增量编译

/linkresource
.NET资源链接到集合中

/main
指定Main方法的位置

/nologo
禁止使用编译器的标志信息

/nooutput
编译文件但不输出文件

/nostdlib
不导出标准库(即mscorlib.dll

/nowarn
编译但编译器并不显示警告功能

/optimize
打开或者关闭优化

/out *
指定输出文件

/recurse
搜索编译源文件的子目录

/reference *
从包含集合的文件中导入元数据

/target *
指定输出文件的格式

/unsafe
编译使用非安全关键字的代码

/warn
设置警告级别

/warnaserror
提升警告为错误

/win32icon
插入一个.ico文件导输出文件中去

/win32res
插入一个Win32资源导输出文件中

===============================================
具体说明:

  一.@

  这个选项是用来指定响应文件。响应文件是一种包含了许多编译选项的文件。这些编译选项将和源代码文件一起由编译器进行处理。一般来说此种响应文件是以文本文件形式出现。他的扩展名是.rsp。在响应文件中是用#符号表示开始的注释。

  例:以下是一个响应文件resp1.rsp的内容:

  # 这是一个简单的响应文件,文件名称为resp1.rsp

  #使用方法: csc @resp1.rsp

/target:exe /out:sample.exe sample.cs

  此响应文件的作用就是把sample.cs文件编译成sample.exe文件。如果在一次编译中要指定多个响应文件,可以指定多个响应文件选项,如:

@file1.rsp @file2.rsp

  二./?/help

  这个选项应该不必多说,那些用过DOS程序的人,大概都会用这个选项。

  三./addmodule

  本选项是使编译器搜集从用户正在编译的工程到可用文件中所以类型的信息。所有添加了/addmodule的模块在运行时必须与输出文件在同一目录中。这就是说,用户可以在编译时指定任何目录中的模块,但在运行时这个模块必须在应用程序目录中。文件中不能包含汇编名单。例如:如果输出文件用/taarget:module创建,其元数据可以用/addmodule导入。

  例子:把二个模块加入myProject.cs

csc /addmodule:module1.dll;module2.dll myProject.cs

  四./baseaddress

  本选项允许用户指定载入DLL时的首选地址,这个首选地址可以是十进制、十六进制、八进制。DLL的缺省首选地址在.Net运行时设置。如果目标文件不是DLL文件,这个选项将被忽略。

  例子:把myLibrary.cs 编译程DLL文件,并且当此DLL.Net运行环境被载入时的地址是0x1111000

csc /baseaddres:0x1111000 /target:library myLibrary.cs
============================================================
五./bugreport

  这个选项用来报告编译时的错误信息。在报告中包含以下内容:

  1.编译中所有源代码的一个拷贝

  2.在编译中所有的编译选项

  3.编译信息,包括编译器、运行时间、操作系统的版本信息

  4.编译器输出

  5.问题的描述

  6.如何解决问题的描述

  例子:生成一个bugs.txt文件,并把错误报告放在文件里面

csc /bugreport:bugs.txt Hello.cs

  六./checked

  此选项指定不在检验或或者未检验关键字范围内以及导致超出数据类型范围的值的整数计算语句是否产生运行例外。具体的说就是,如果不在检验或者未检验关键字范围内的整数计算语句产生的值在数据类型允许的范围之外,并且在编译中使用了/checked+(/checked),该语句就会在运行时产生例外,如果在编译时使用了/checked-,在运行时该语句就不会产生例外。

  例子:编译myMath.cs,并且指定一个不在检验或者未检验关键字范围内的整数计算语句(且其产生的值超出数据类型的范围),将在运行时引起例外。

csc /checked+ myMath.cs

  七./codepage

  如果用户编译的一个或者多个源代码不使用计算机上的默认代码页,可以使用/codepage选项来指定希望使用的代码页。/codepage适用于编译中所有的源代码文件。

  如果源代码文件在计算机上的同一个代码页位置创建,或者源代码文件用UNICODE或者UTF-8来创建,用户就不需要使用/codepage了。

  八./debug

  此选项是在调试时候使用的,当调试者启用了这个选项来调试自己的程序,将会创建一个.pdb文件,并把各种调试信息写到此文件里。有2中选项来指定调试的类型:

  /debug [+/-] :当选用/debug +就会把创建.pdb文件,并把调试信息存储到里面;/debug -是一个缺省设置,就是不产生任何调试信息。

  /debug:[full/pdbonly] :当使用/debug:full就是创建缺省的调试信息,有点类似/debug+选项。/debug: pdbonly选项是创建.pdb文件,并且你只能使用源代码调试在调试工具里。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
开发 C# OPC 客户端发布时间:2022-07-14
下一篇:
C# winform treeview node添加右键菜单并选中节点发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap