我是.NET C#编程的新手.我在看几本书.据说,不是将C#代码直接编译成机器代码,而是将其转换成一种中间语言(称为MSIL,又名CIL).但是当我编译时,我得到一个exe/dll文件.

  1. 此MSIL/CIL是否包含在这些exe/dll文件中?
  2. 我想看看中间语言代码,只是想感受一下它的存在.我如何看待它?
  3. 他们称这个exe/dll文件为assembly.他们使用这个"花哨的词"只是为了将它们与包含本机/机器代码的exe/dll文件区分开来吗?

推荐答案

  1. 是的,更确切地说是在PE file.text部分(可移植可执行文件=*.exe或*.dll).更多信息请参见here.
  2. 最好的 Select 是使用ILSpy(反射器不再免费).它是一个免费的反汇编程序,可以将你的程序集分解成MSIL,也可以分解成C#,VB(在某种程度上).这个NET Framework SDK包含ILDasm,它是官方的MSIL dissasembler.
  3. 基本上是的.程序集是包含MSIL代码和相应元数据的文件.这并不局限于PE文件本身,但所有当前的CLR实现都使用它们.

如果我可以推荐一本关于这件事的好书的话,它是专家级的.NET 2.0 IL汇编程序,由Serge Lidin编写.他就是设计MSIL的人.

.net相关问答推荐

在 Invoke() 中运行时,跨线程操作对表单控件无效 - .NET

IANA 到 Windows 时区映射

如何在选项卡中 Select Winforms NumericUpDown 中的所有文本?

每当属性值发生变化时引发事件?

Erlang 的让它崩溃的哲学 - 适用于其他地方吗?

C#字符串的GetHashCode()是如何实现的?

DbContext 丢弃更改而不释放

将客户端证书添加到 .NET Core HttpClient

DateTime.TryParseExact() 拒绝有效格式

在 C# 中将字符串转换为十六进制字符串

我应该在 LINQ 查询中使用两个where子句还是&&?

String.Replace() 与 StringBuilder.Replace()

beforefieldinit 标志有什么作用?

是否可以在 XP 上运行 .NET 4.5 应用程序?

如何找到二维数组的大小?

通过继承扩展枚举

如何隐藏 WPF ListView 的标题?

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain

在 WPF 中设置 Tab 键顺序

如何为 Dapper 查询动态创建参数