【发布时间】:2016-06-04 16:13:57
【问题描述】:
在 .NET 中,我们有多个平台,每个平台都由自己的运行时、自己的基础库和用于启动运行时的支持软件等组成。
关于那些不同的平台,我们可以在编译代码时针对特定平台。这意味着我们为特定平台编译。
在新的 .NET Core 项目模型中,这一点更加清晰。在project.json 文件中,我们在frameworks 部分指定我们要编译的平台,列出它们的TFM。
我的问题是,据我了解,开发到平台或其他平台的主要区别在于可用的基础库(例如,对于完整的 .NET,我们拥有整个 BCL)。但这似乎是一个“运行时问题”而不是“编译时问题”。
原因是,当代码作为 IL 部署到特定平台以及何时运行时,它会查看所需基础库中的必要程序集是否可用,对吗?
既然如此,为什么会有“为特定平台编译”的想法?每个平台的编译过程是否不同?每个平台生成的 IL 是否不同?
【问题讨论】:
-
生成的 IL stays the same 只有一个标志来决定应用程序运行时会发生什么(将 IL 转换为 x64 操作系统上的 x86 机器代码等)
-
首先拥有 IL 的全部要点在于它不是特定于平台的,并且任何兼容的运行时必须都能够运行它(根据定义;如果不能,那么它就不是兼容的运行时)。
-
这正是我的疑问,因为 IL 不是特定于平台的,任何兼容的运行时都必须能够运行它,为什么我们在构建时需要针对特定平台?平台之间的差异不仅仅是在运行时?我不明白为什么编译不应该是一样的。