我知道,这个问题对许多人来说可能是一个常见的问题,但我很困惑。我在用c#阅读.net。我经历了许多文章和msdn。我的疑问是:已发布的应用程序(windows窗体)是机器码?
当我在VS中开发C#Windows窗体应用程序代码并运行它时,请执行Project \ bin \ Debug \中具有扩展名“.exe”的文件是中间代码还是机器代码?当我发布它时,我得到一个安装程序的那一刻,它是一个机器代码还是一个中间代码?因为有时安装程序需要安装.net。
请帮我理解这个概念。
谢谢。
我知道,这个问题对许多人来说可能是一个常见的问题,但我很困惑。我在用c#阅读.net。我经历了许多文章和msdn。我的疑问是:已发布的应用程序(windows窗体)是机器码?
当我在VS中开发C#Windows窗体应用程序代码并运行它时,请执行Project \ bin \ Debug \中具有扩展名“.exe”的文件是中间代码还是机器代码?当我发布它时,我得到一个安装程序的那一刻,它是一个机器代码还是一个中间代码?因为有时安装程序需要安装.net。
请帮我理解这个概念。
谢谢。
编译的.exe文件包含MSIL
(微软中间语言代码),这里是怎么回事了(从here):
当我发布它,那一刻我得到一个安装程序,它是一个机器代码或中间代码?因为有时安装程序需要安装.net。
在.NET .exe
总是MSIL
码,安装程序会为您的应用程序的先决条件之前安装.NET Framework。
它们都是MSIL
代码,Project\bin\Debug
中的可执行文件与您在发布应用程序时获得的可执行文件相同,但它们与打开的调试符号链接。
简体答案:
当我开发VS一个C#Windows窗体应用程序代码并运行它,做项目\ BIN \调试\它的扩展名为“.exe”的文件是一个中间代码或机器码?
它的IL代码将由.NET当您启动.exe文件转换为二进制/机器码
,当我发布了,那一刻我得到一个安装程序,它是一个机器代码或中间代码?因为有时安装程序需要安装.net。
同样的事情。发布模式(您应该发布)和调试模式之间的区别在于前者是优化的,而另一种是为了使调试更容易。
所以当我双击发布的.exe代码时,MSIL是由CLR执行的?我的意思是,当我给某人安装程序时,他们应该使用CLR(.NET)来运行安装程序? –
您需要运行应用程序的.NET,但安装程序不需要.NET。您可以让您的安装程序包含.NET框架,以便与您的应用程序一起安装。 – PVitt