MSIL参考

时间:2013-10-02 21:27:55

标签: .net cil il

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

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

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

2 个答案:

答案 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).

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