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
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 bernamamyStringer
, yang menyertakan kelas bernamaStringer
. KelasStringer
berisi metode yang disebutStringerMethod
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
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.
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
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
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 kelasMainClientApp
, 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.