Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet75/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   71   72   73   74   75   76   77   78   ...   91
Bog'liq
Язык программирования C#

16.6. Создание и использование сборок

Все библиотеки и простые приложение в среде .Net являются сборками, поэтому все, что мы создали ранее, было сборками. В этой главе мы явно разнесем небольшое приложение на две части: на библиотеку и на исполняемый модуль.


Начнем с написание библиотеки. Для этого создайте новый проект и в правой части окна New Project, отвечающей за выбор нужного шаблона приложения, отметьте Class Library, теперь назовите вашу библиотеку именем HelloLib. Перед вами откроется шаблон новой библиотеки, схожий с шаблоном консольного приложения. Он уже содержит новое пространство имен HelloLib, в этом пространстве имен мы определим класс Hello, содержащий два статических метода SayHello() и SayHelloTo().

using System;


namespace HelloLib


{
public class Hello
{
public static void SayHello()
{
Console.WriteLine("Hello!");
}

public static void SayHelloTo(string Name)


{
Console.WriteLine("Hello, " + Name + "!");
}
}
}
Лист. 7.7

Чтобы получить готовую к использованию и распространению .Net библиотеку выберите в меню пункт Build -> Build Solution или нажмите на комбинацию Ctrl + Shift + B. В результате в директории Bin\Debug вашего проекта должна появиться DLL библиотека с именем, совпадающим с именем проекта. В нашем случае это HelloLib.


Если вы сейчас попытаетесь запустить проект на выполнение, то получите следующую ошибку, сигнализирующую, что в библиотеки нет точки входа и для её запуска необходимо написать отдельное приложение, вызывающее методы библиотеки.



Рис. 7.2

Чтобы посмотреть содержимое сборки и её манифест можно воспользоваться утилитой IL DASM, входящей в комплект поставки Visual Studio. Откройте вашу библиотеку в IL DASM, вы увидите древовидную структуру, как в проводнике Explorer, вторым пунктом сразу после пути к файлу библиотеки находится манифест сборки (Рис. 3), дважды щелкните по нему и вы видите описание манифеста вшей сборки (Рис. 4).





Рис. 7.3

Рис. 7.4

Приведем этот манифест в развернутом виде с нашими комментариями.


// Версия метаданных: v2.0.50727


// Имя используемой внешней сборки.
.assembly extern mscorlib
{
// Ключ внешней сборки. Он однозначно определяет её глобально.
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
// Используемая версия сборки.
.ver 2:0:0:0
}
// Имя нашей сборки.
.assembly HelloLib
{
// Далее идут атрибуты методов и конструкторов, определенных в нашей
// сборке.
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 31 2E 30 2E 30 2E 30 00 00 ) // ...1.0.0.0..
.custom instance void [mscorlib]System.Runtime.InteropServices.GuidAttribute::.ctor(string) = ( 01 00 24 34 64 32 35 37 37 63 65 2D 38 64 38 37 // ..$4d2577ce-8d87
2D 34 34 30 31 2D 61 34 38 66 2D 33 64 31 30 34 // -4401-a48f-3d104
32 36 65 64 30 31 39 00 00 ) // 26ed019..
.custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyTrademarkAttribute::.ctor(string) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyCopyrightAttribute::.ctor(string) = ( 01 00 12 43 6F 70 79 72 69 67 68 74 20 C2 A9 20 // ...Copyright ..
20 32 30 30 38 00 00 ) // 2008..
.custom instance void [mscorlib]System.Reflection.AssemblyProductAttribute::.ctor(string) = ( 01 00 08 48 65 6C 6C 6F 4C 69 62 00 00 ) // ...HelloLib..
.custom instance void [mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyConfigurationAttribute::.ctor(string) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 00 00 00 )
.custom instance void [mscorlib]System.Reflection.AssemblyTitleAttribute::.ctor(string) = ( 01 00 08 48 65 6C 6C 6F 4C 69 62 00 00 ) // ...HelloLib..

// --- The following custom attribute is added automatically, do not uncomment -------


// .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 07 01 00 00 00 00 )

.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 )


.custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx
63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows.
// Алгоритм хеширования сборки. Определяет алгоритм по которому
// рассчитывался маркер открытого ключа данной сборки.
.hash algorithm 0x00008004
// Версия сборки.
.ver 1:0:0:0
}
// Имя файла сборки. Указывает имя основного модуля данной сборки.
.module HelloLib.dll
// MVID: {1CF9E9AE-54D5-4C6D-833D-CF8F15434152}
.imagebase 0x00400000
// Предпочтительное смещение при загрузки сборки.
.file alignment 0x00001000
.stackreserve 0x00100000
// Тип приложения.
.subsystem 0x0003 // WINDOWS_CUI
// Неиспользуемая, но зарезервированная директива.
.corflags 0x00000001 // ILONLY
// Image base: 0x03E60000
Лист. 7.8

Как можно увидеть, манифест содержит полную системную информацию о сборке. Эта информация наиболее активно используется при разработке сложных динамически загружаемых приложений - для начального же знакомства дадим краткое предварительное описание содержимого манифеста сборки:


1. В начале манифеста находится секция .assembly extern mscorlib, в которой описываются зависимости от внешних сборок, используемых в данной программе. Здесь для каждой сборки указывается версия и контрольная сумма. Эти данные берутся из сборок при компиляции программы, что гарантирует во время работы приложения использование именно тех сборок, которые использовались при компиляции и тестировании,
2. Далее следует секция .assembly, но уже без модификатора extern. С этой директивы и начинается описание сборки. Как можно заметить, .ver описывает версию сборки, секция .hash algorithm определяет функцию, по которой будет вычисляться хэш-код, затем в манифесте располагаются описания имени самого модуля, подсистемы исполнения, информация о выравнивании секций и еще некоторые данные.
Теперь напишем программу, использующую классы, экспортируемые нашей библиотекой. Для этого создайте новое консольной приложение, назовите его UseHelloLiи. Теперь нажмите правой кнопкой мыши на иконку вашего проекта, в открывшимся меню выберите пункт Add Reference, перед вами откроется окно с несколькими в кладками (Рис. 5), прейдите в нем на вкладку Brows, и через нее уже найдите и выберите библиотеку HelloLib.



Рис. 7.5

Теперь ваше новое приложение, которое также является сборкой, содержит ссылку на сборку HelloLib. Подключим к нему пространство имен HelloLib и вызовем наши методы


SayHello() и SayHelloTo().


using System;


using HelloLib;


namespace UseHelloLib


{
class Program


{
static void Main(string[] args)
{
Hello.SayHello();
Hello.SayHelloTo("tsalik");
}
}

}


Лист. 7.9

Вывод программы:


Hello!
Hello, tsalik!
Вывод. 7.1

Теперь если вы откроете вашу новую сборку в IL DASM, то увидите, что помимо mscorlib она содержит ссылки на нашу библиотеку HelloLib.





Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   71   72   73   74   75   76   77   78   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling