0

我知道,这个问题对许多人来说可能很常见,但我很困惑。我正在用 c# 阅读 .net。我浏览了很多文章和msdn。我的疑问是:

当我在 VS 中开发 C# Windows 窗体应用程序代码并运行它时,Project\bin\Debug\ 中扩展名为“.exe”的文件是中间代码还是机器代码?当我发布它时,我得到安装程序的那一刻,它是机器代码还是中间代码?因为有时安装程序需要安装 .net。

请帮助我理解这个概念。

谢谢你。

4

3 回答 3

3

编译后的 .exe 包含MSIL(Microsoft 中间语言代码),它是如何发生的(从这里开始):

  • 源代码被转换为通用中间语言,CIL 相当于 CPU 的汇编语言。
  • 然后将 CIL 组装成一种所谓的字节码形式,并创建一个 .NET 程序集。
  • 在执行 .NET 程序集时,其代码通过运行时的 JIT 编译器生成本机代码。也可以使用提前编译,这消除了这一步,但代价是可执行文件的可移植性。
  • 本机代码由计算机的处理器执行。

当我发布它时,我得到一个安装程序的那一刻,它是机器代码还是中间代码?因为有时安装程序需要安装 .net。

.Net.exe始终是MSIL代码,安装程序之前可能会安装 .net 框架作为应用程序的先决条件。

于 2011-11-18T09:06:27.047 回答
2

简化答案:

当我在 VS 中开发 C# Windows 窗体应用程序代码并运行它时,Project\bin\Debug\ 中扩展名为“.exe”的文件是中间代码还是机器代码?

它是 IL 代码,当您启动 .exe 时,它​​将由 .NET 转换为二进制/机器代码

当我发布它时,我得到安装程序的那一刻,它是机器代码还是中间代码?因为有时安装程序需要安装 .net。

一样。发布模式(你应该发布)和调试模式之间的区别在于前者是优化的,而另一个是为了使调试更容易。

于 2011-11-18T09:08:31.807 回答
1

它们都是MSIL代码,其中的可执行文件Project\bin\Debug与您发布应用程序时获得的可执行文件相同,但它们与打开的调试符号相关联。

于 2011-11-18T08:59:51.720 回答