2

在 VB.NET 中,您可以添加文件引用或项目引用。例如,如果您想使用 SQLConnection 类,那么您将添加对 System.Data.SQLClient 的引用并导入命名空间。

这如何在 MSIL 和汇编语言的较低级别上工作。我假设可执行文件将包含 System.Data.SQLClient 中的所有代码?

我检查了一些从 VB.NET 项目生成的 MSIL,但我仍然不清楚。

4

2 回答 2

3

不,可执行文件不会包含来自System.Data.SQLClient. 相反,.NET 运行时加载您的应用程序引用的程序集。这允许程序集在许多应用程序之间共享。因此,正在运行的进程包含来自 的代码System.Data.dll,但您的可执行文件不包含。

于 2013-10-02T21:33:33.933 回答
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).

更多信息:http: //msdn.microsoft.com/en-us/library/ceats605.aspx

于 2013-10-02T21:39:23.550 回答