在VB.NET中,您可以添加文件引用或项目引用。例如,如果要使用SQLConnection类,则应添加对System.Data.SQLClient的引用并导入名称空间。
这在MSIL和汇编语言中的较低级别如何工作。我假设可执行文件将包含System.Data.SQLClient的所有代码?
我已经检查了一些从VB.NET项目生成的MSIL,但我仍然不清楚。
答案 0 :(得分:3)
不,可执行文件不包含System.Data.SQLClient
的所有代码。而是.NET运行时加载应用程序引用的程序集。这允许在许多应用程序之间共享程序集。因此,运行过程包括来自System.Data.dll
的代码,但您的可执行文件不包含。
答案 1 :(得分:2)
加载了system.Data程序集(因为你的项目引用它),你可以在MANIFEST(ildasm)中看到这个
.assembly extern System.Data
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 4:0:0:0
}
使用SqlConnection的调用:
IL_000f: newobj instance void [System.Data]System.Data.SqlClient.SqlConnection::.ctor()
.assembly extern的定义:
.assembly extern <assembly name>
Specifies another assembly that contains items referenced by the current module (in this example, mscorlib).