2013-10-02 5 views
2

В VB.NET вы можете добавить ссылки на файлы или ссылки на проекты. Например, если вы хотите использовать класс SQLConnection, вы должны добавить ссылку на System.Data.SQLClient и импортировать пространство имен.MSIL ссылки

Как это работает на более низком уровне в MSIL и на ассемблере. Я предполагаю, что исполняемый файл будет содержать весь код из System.Data.SQLClient?

Я проверил MSIL, сгенерированный из проекта VB.NET, но я до сих пор неясно.

ответ

3

Нет, исполняемый файл не будет включать весь код из System.Data.SQLClient. Вместо этого среда выполнения .NET загружает сборки, на которые ссылаются ваши приложения. Это позволяет собирать сборки для многих приложений. Таким образом, текущий процесс включает код от System.Data.dll, но ваш исполняемый файл не работает.

+0

Не больше ли это AppDomain, чем процесс, включающий код? (Хотя это различие не имеет значения в большинстве случаев.) – svick

+0

AppDomain - это действительно просто еще один контейнер в управляемом приложении. Библиотека (модуль, если вы), безусловно, загружается на уровне процесса. –

2

Узел system.Data загружен (потому что ваш проект ссылки на него), вы можете увидеть это в манифесте (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() 

Defnition из .assembly ехЬегп:

.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

+0

Спасибо. Это было полезно. +1. – w0051977

Смежные вопросы