|
|
1
4
以运行时为目标意味着为运行时编译,也就是说,输出cil(即msil)(而不是x86/x64/etc.机器代码)。 说任何不以运行时为目标的东西都是“非托管代码”,这有点像是一种错误的二分法。例如,在JVM上运行的代码可以说是被管理的,但是我认为在这个上下文中,我们可以把这个句子理解为“unamaged[by the clr]”。 可以编写一个C编译器,它可以输出本机代码,而不是以运行时为目标(尽管您可能需要 一些 至少对于GC来说是运行时),并且同样可以编写出吐出CIL的C编译器。在这个例子中,假设的C编译器不会以运行时为目标,但假设的C编译器会。这里的重要区别是将语言与其目标分离。 不以运行时为目标的.NET应用程序是矛盾的。如果它不以运行时为目标,它就不会是.NET应用程序。
不过,它可能会变得更模糊,
|
|
|
2
2
在.NET框架上运行的所有代码都是托管代码。非托管代码的一个例子是C++,称为非托管代码或本机代码。 |
|
3
2
这是一个模糊的术语,意思是“配置构建工具以生成与托管运行时兼容的二进制映像”。可以运行托管代码的可执行文件遵循标准的PE32文件格式。作为exe和dll文件熟悉。这种二进制图像在.NET语言中称为“程序集”。它的格式在这里有很好的记录 Ecma standard document . 大多数常用的构建工具都是专门用于创建托管程序集的。与csc.exe和vb c.exe类似,分别是c_和vb.net编译器。一些工具可以生成任意一个,并且必须使用正确的命令行选项来运行才能获得所需的最终结果。类似于CL.exe和Link .exe,用于C/C++的编译器和链接器,内置支持C++/CLI语言。它们还可以创建包含托管IL和机器代码组合的程序集。 尤其是后两个工具不太容易用于针对托管运行时。这是集成开发环境和与Visual Studio集成的构建系统的工作,以使它变得容易。 |
|
|
nuno · Java/Kotlin堆大小 1 年前 |
|
|
Vertos · 即使在Java中断后,线程也会继续打印RAM使用情况 2 年前 |
|
|
estakkk · 在Flask应用程序中遇到RuntimeError 2 年前 |
|
|
JY1993 · 如何修复邮件合并的运行时错误? 2 年前 |
|
|
Park · 为什么两个不同实例的isa指针相同? 8 年前 |
|
|
Matthias · 转到运行时日志详细信息更改 8 年前 |
|
|
belnxkkk · spring在运行时添加数据源 8 年前 |