在 VB.NET 中,您可以添加文件引用或项目引用。例如,如果您想使用 SQLConnection 类,那么您将添加对 System.Data.SQLClient 的引用并导入命名空间。
这如何在 MSIL 和汇编语言的较低级别上工作。我假设可执行文件将包含 System.Data.SQLClient 中的所有代码?
我检查了一些从 VB.NET 项目生成的 MSIL,但我仍然不清楚。
不,可执行文件不会包含来自System.Data.SQLClient
. 相反,.NET 运行时加载您的应用程序引用的程序集。这允许程序集在许多应用程序之间共享。因此,正在运行的进程包含来自 的代码System.Data.dll
,但您的可执行文件不包含。
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).