了解.net编译



就我对。net概念的理解而言,源代码首先被翻译成汇编(IL代码+元数据),然后用CLR的JIT编译器在目标机器上编译成机器码。然而,我无法真正将这些概念与我在c#项目中所看到的相匹配。当我构建一个项目时,我得到一个.exe文件,我假设它是可执行的机器代码。IL存储在哪里?我可以访问它并将其转移到其他平台(例如Linux)吗?

总之,有人能纠正我的理解并解释一下输出吗?

当我构建一个项目时,我得到一个。exe文件,我认为这是可执行的机器代码

这是不正确的。exe文件只包含一个小存根,使操作系统在。net运行时加载它。或者对于自包含程序集,我猜它包含整个运行时。无论如何,.exe文件的其余部分是il代码,将由运行时加载并编译为机器码。

在linux上,我认为你只是调用。net运行时直接与你的汇编作为参数。即dotnet myAssembly.exe

.net程序集中没有汇编代码。

。. Net程序被转换为. Net程序集,该程序集是包含中间字节码的.exe或.dll。看到CIL

Visual Studio将把。net程序集放在项目的/bin或/bin/release目录中。

dll或.exe是在所引用的文件夹中生成的汇编文件。

只要平台支持框架版本,这两个文件都可以在linux上运行。

完整的。net框架仅适用于windows,但mono和core正在移植到linux。

https://learn.microsoft.com/en-us/dotnet/standard/assembly/

最新更新