Show/Hide Toolbars

XSharp

 

禁止生成空的 $Init1() 和 $Exit() 函数

 

背景信息

X# 编译器会在每个程序集中生成用于调用 INIT 程序和 EXIT 程序的特殊函数。

INIT 程序有 3 个级别。

这 3 个级别中的每一级都会创建一个特殊函数:$Init1()、$Init2() 和 $Init3()。对于 EXIT 程序,编译器会创建一个函数 $Exit()。

函数 $Init2() 和 $Init3() 只在需要时才创建。

函数 $Init1() 和 $Exit() 始终会创建。

 

使用 X# 编译 EXE 时,编译器生成的代码会在启动时调用所有引用程序集中的 $Init1()、$Init2() 和 $Init3()函数,并在关闭时调用 $Exit() 函数。

 

这种机制还能保证引用程序集中的类在运行时可用,即使你没有在代码中明确引用这些类,你也可以用 CreateInstance() 来实例化这些类。

 

编译器选项 -noinit 会抑制空 $Init1() 和 $Exit() 函数的生成。因此,如果不引用这些程序集的代码,就不会出现与外部程序集的硬链接。

如果在只包含定义的程序集中使用这些编译器选项,那么定义将在编译时解析,运行时无需包含程序集(除非这些定义包含需要在运行时解析的值,如符号或日期值)。