Практическое руководство. Создание многофайловой сборки
Обновлен: Ноябрь 2007
В этом разделе описывается процедура, используемая для создания многофайловой сборки, и показан полный пример, иллюстрирующий все этапы процедуры.
Создание многофайловой сборки
Скомпилируйте в модули кода все файлы, содержащие пространства имен, на которые имеются ссылки в других модулях сборки. По умолчанию расширение для модулей кода: NETMODULE. Например, если файл с именем Stringer создает пространство имен с именем myStringer, на которое ссылается код файла Client, то Stringer должен быть скомпилирован в модуль кода первым.
Скомпилируйте все другие модули, используя соответствующие параметры компилятора для указания других модулей, на которые имеются ссылки в коде.
Используйте компоновщик сборок (Al.exe) для создания выходного файла, содержащего манифест сборки. Выходной файл содержит справочную информацию для всех модулей или ресурсов, входящих в сборку.
Примечание. Интегрированную среду разработки в Visual Studio 2005 для C# и Visual Basic можно использовать только для создания однофайловых сборок. Если нужно создать многофайловую сборку, то необходимо использовать компилятор командной строки или Visual Studio 2005 с Visual C++.
В следующем примере показан первый шаг вышеописанной процедуры, в котором производится компиляция файлов с пространствами имен, на которые имеются ссылки из других файлов. Этот пример начинается с простого кода для файла Stringer. Файл Stringer имеет пространство имен по имени myStringer с классом, названным Stringer. Класс Stringer содержит метод с именем StringerMethod, который выводит отдельную строку на консоль.
' Assembly building example in the .NET Framework.
Imports System
Namespace myStringer
Public Class Stringer
Public Sub StringerMethod()
Console.WriteLine("This is a line from StringerMethod.")
End Sub
End Class
End Namespace
// Assembly building example in the .NET Framework.
using System;
namespace myStringer
{
public class Stringer
{
public void StringerMethod()
{
System.Console.WriteLine("This is a line from StringerMethod.");
}
}
}
Для компиляции этого кода используйте следующую команду:
vbc /t:module Stringer.vb
csc /t:module Stringer.cs
Задание параметра module вместе с параметром компилятора /t: указывает на то, что результатом компиляции является модуль, а не сборка. Компилятор создает модуль с именем Stringer.netmodule, который можно добавить в сборку.
На втором шаге процедуры необходимо скомпилировать модули, содержащие ссылки на другие модули. На этом этапе используется параметр компилятора /addmodule. В следующем примере модуль кода с именем Client имеет метод точки входа Main, который ссылается на метод в модуле Stringer.dll, созданном на первом шаге.
В следующем примере показан код модуля Client.
Imports System
Imports myStringer 'The namespace created in Stringer.netmodule.
Class MainClientApp
' Shared method Main is the entry point method.
Public Shared Sub Main()
Dim myStringInstance As New Stringer()
Console.WriteLine("Client code executes")
'myStringComp.Stringer()
myStringInstance.StringerMethod()
End Sub
End Class
using System;
using myStringer; //The namespace created in Stringer.netmodule.
class MainClientApp
{
// Static method Main is the entry point method.
public static void Main()
{
Stringer myStringInstance = new Stringer();
Console.WriteLine("Client code executes");
//myStringComp.Stringer();
myStringInstance.StringerMethod();
}
}
Для компиляции этого кода используйте следующую команду:
vbc /addmodule:Stringer.netmodule /t:module Client.vb
csc /addmodule:Stringer.netmodule /t:module Client.cs
Укажите параметр /t:module, поскольку этот модуль будет добавлен в сборку на следующем шаге. Также укажите параметр /addmodule, поскольку код в Client ссылается на пространство имен, созданное кодом в Stringer.netmodule. Компилятор создает модуль с именем Client.netmodule, который содержит ссылку на модуль Stringer.netmodule.
Примечание. |
---|
Компиляторы C# и Visual Basic поддерживают непосредственное создание многофайловых сборок с помощью следующих двух синтаксических структур. |
Для создания сборки из двух файлов используются две компиляции:
vbc /t:module Stringer.vb vbc Client.vb /addmodule:Stringer.netmodule
csc /t:module Stringer.cs csc Client.cs /addmodule:Stringer.netmodule
При создании сборки из двух файлов используется одна компиляция:
vbc /out:Stringer.netmodule Stringer.vb /out:Client.exe Client.vb
csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
Для создания сборки из коллекции модулей скомпилированного кода можно использовать компоновщик сборок (Al.exe).
Создание многофайловой сборки с помощью компоновщика сборок
В командной строке введите следующую команду:
al <имя модуля> <имя модуля> … /main:<имя метода> /out:<имя файла> /target:<тип файла сборки>
В этой команде в аргументах имя модуля задаются имена всех модулей, которые будут включены в сборку. В параметре /main: указывается имя метода, являющегося точкой входа сборки. В параметре /out: задается имя выходного файла, содержащего метаданные сборки. В параметре /target: указывается, что сборка является исполняемым файлом консольного приложения (EXE), исполняемым файлом Windows (WIN) или же файлом библиотеки (LIB).
В следующем примере средство Al.exe создает сборку, являющуюся консольным приложением с именем myAssembly.exe. Приложение состоит из двух модулей с именами Client.netmodule и Stringer.netmodule и исполняемого файла с именем myAssembly.exe, , который содержит только метаданные сборки. Точкой входа сборки является метод Main класса MainClientApp, который находится в библиотекеClient.dll.
al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe
Для проверки содержимого сборки или определения, является ли файл сборкой или модулем, можно использовать средство MSIL Disassembler (Ildasm.exe).
См. также
Задачи
Практическое руководство. Просмотр содержимого сборок