Поделиться через


Практическое руководство. Создание многофайловой сборки

Обновлен: Ноябрь 2007

В этом разделе описывается процедура, используемая для создания многофайловой сборки, и показан полный пример, иллюстрирующий все этапы процедуры.

Создание многофайловой сборки

  1. Скомпилируйте в модули кода все файлы, содержащие пространства имен, на которые имеются ссылки в других модулях сборки. По умолчанию расширение для модулей кода: NETMODULE. Например, если файл с именем Stringer создает пространство имен с именем myStringer, на которое ссылается код файла Client, то Stringer должен быть скомпилирован в модуль кода первым.

  2. Скомпилируйте все другие модули, используя соответствующие параметры компилятора для указания других модулей, на которые имеются ссылки в коде.

  3. Используйте компоновщик сборок (Al.exe) для создания выходного файла, содержащего манифест сборки. Выходной файл содержит справочную информацию для всех модулей или ресурсов, входящих в сборку.

    226t7yxe.alert_note(ru-ru,VS.90).gifПримечание.

    Интегрированную среду разработки в 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.

226t7yxe.alert_note(ru-ru,VS.90).gifПримечание.

Компиляторы 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).

См. также

Задачи

Практическое руководство. Просмотр содержимого сборок

Основные понятия

Создание сборок

Обнаружение сборок в среде выполнения

Многофайловые сборки