Bagikan melalui


Cara: Membangun assembly multifile

Catatan

Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.

Artikel ini menjelaskan cara membuat rakitan multifile dan menyediakan kode yang mengilustrasikan setiap langkah dalam prosedur.

Catatan

Visual Studio IDE untuk C# dan Visual Basic hanya dapat digunakan untuk membuat rakitan file tunggal. Jika Anda ingin membuat rakitan multifile, Anda harus menggunakan pengompilasi baris perintah atau Visual Studio dengan Visual C++. Rakitan multifile hanya didukung oleh .NET Framework.

Membuat rakitan multifile

  1. Kompilasi semua file yang berisi namespace yang direferensikan oleh modul lain di rakitan ke dalam modul kode. Ekstensi default untuk modul kode adalah .netmodule.

    Misalnya, file Stringer memiliki namespace bernama myStringer, yang menyertakan kelas bernama Stringer. Kelas Stringer berisi metode yang disebut StringerMethod yang menulis satu baris ke konsol.

    // Assembly building example in the .NET Framework.
    using namespace System;
    
    namespace myStringer
    {
        public ref class Stringer
        {
        public:
            void StringerMethod()
            {
                System::Console::WriteLine("This is a line from StringerMethod.");
            }
        };
    }
    
    // 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.");
            }
        }
    }
    
    ' Assembly building example in the .NET Framework.
    Namespace myStringer
        Public Class Stringer
            Public Sub StringerMethod()
                System.Console.WriteLine("This is a line from StringerMethod.")
            End Sub
        End Class
    End Namespace
    
  2. Gunakan perintah berikut untuk mengompilasi kode ini:

    cl /clr:pure /LN Stringer.cpp
    
    csc /t:module Stringer.cs
    
    vbc /t:module Stringer.vb
    

    Menentukan parameter modul dengan opsi pengompilasi /t: menunjukkan bahwa file harus dikompilasi sebagai modul, bukan sebagai rakitan. Pengompilasi menghasilkan modul yang disebut Stringer.netmodule, yang dapat ditambahkan ke rakitan.

  3. Kompilasi semua modul lain, menggunakan opsi pengompilasi yang diperlukan untuk menunjukkan modul lain yang direferensikan dalam kode. Langkah ini menggunakan opsi pengompilasi /addmodule.

    Dalam contoh berikut, modul kode yang disebut Klien memiliki metode titik Main masuk yang mereferensikan metode dalam modul Stringer.netmodule yang dibuat di langkah 1.

    #using "Stringer.netmodule"
    
    using namespace System;
    using namespace myStringer; //The namespace created in Stringer.netmodule.
    
    ref class MainClientApp
    {
        // Static method Main is the entry point method.
    public:
        static void Main()
        {
            Stringer^ myStringInstance = gcnew Stringer();
            Console::WriteLine("Client code executes");
            myStringInstance->StringerMethod();
        }
    };
    
    int main()
    {
        MainClientApp::Main();
    }
    
    using System;
    using myStringer;
    
    class MainClientApp
    {
        // Static method Main is the entry point method.
        public static void Main()
        {
            Stringer myStringInstance = new Stringer();
            Console.WriteLine("Client code executes");
            myStringInstance.StringerMethod();
        }
    }
    
    Imports myStringer
    
    Class MainClientApp
        ' Static method Main is the entry point method.
        Public Shared Sub Main()
            Dim myStringInstance As New Stringer()
            Console.WriteLine("Client code executes")
            myStringInstance.StringerMethod()
        End Sub
    End Class
    
  4. Gunakan perintah berikut untuk mengompilasi kode ini:

    cl /clr:pure /FUStringer.netmodule /LN Client.cpp
    
    csc /addmodule:Stringer.netmodule /t:module Client.cs
    
    vbc /addmodule:Stringer.netmodule /t:module Client.vb
    

    Tentukan opsi /t:module karena modul ini akan ditambahkan ke rakitan di langkah mendatang. Tentukan opsi /addmodule karena kode di Klien mereferensikan namespace yang dibuat oleh kode di Stringer.netmodule. Pengompilasi menghasilkan modul bernama Client.netmodule yang berisi referensi ke modul lain, Stringer.netmodule.

    Catatan

    Pengompilasi C# dan Visual Basic mendukung pembuatan rakitan multifile secara langsung menggunakan dua sintaks berbeda berikut.

    Dua kompilasi membuat rakitan dua file:

    cl /clr:pure /LN Stringer.cpp
    cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule
    
    csc /t:module Stringer.cs
    csc Client.cs /addmodule:Stringer.netmodule
    
    vbc /t:module Stringer.vb
    vbc Client.vb /addmodule:Stringer.netmodule
    

    Satu kompilasi membuat rakitan dua file:

    cl /clr:pure /LN Stringer.cpp
    cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule
    
    csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
    
    vbc /out:Client.exe Client.vb /out:Stringer.netmodule Stringer.vb
    
  5. Gunakan Assembly Linker (Al.exe) untuk membuat file output yang berisi manifes rakitan. File ini berisi informasi referensi untuk semua modul atau sumber daya yang merupakan bagian dari rakitan.

    Pada prompt perintah, jalankan perintah berikut ini:

    al<nama modul><nama modul> … /main:<nama metode>/out:<nama file>/target:<jenis file rakitan>

    Dalam perintah ini, argumen nama modul menentukan nama setiap modul untuk disertakan dalam rakitan. Opsi /main: menentukan nama metode yang merupakan titik masuk rakitan. Opsi /out: menentukan nama file output, yang berisi metadata rakitan. Opsi /target: menetapkan bahwa rakitan adalah file yang dapat dijalankan aplikasi konsol (.exe), file yang dapat dijalankan Windows (.win), atau pustaka (.lib).

    Dalam contoh berikut, Al.exe membuat rakitan yang merupakan aplikasi konsol yang dapat dieksekusi bernama myAssembly.exe. Aplikasi ini terdiri dari dua modul yang disebut Client.netmodule dan Stringer.netmodule, serta file yang dapat dijalankan bernama myAssembly.exe, yang hanya berisi metadata rakitan. Titik masuk rakitan adalah metode Main di kelas MainClientApp, yang terletak di Client.dll.

    al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe
    

    Anda dapat menggunakan Il Disassembler (Ildasm.exe) untuk memeriksa konten assembly, atau menentukan apakah file adalah rakitan atau modul.

Lihat juga