Nasıl yapılır: Çok dosyalı derleme oluşturma
Not
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Bu makalede, çok dosyalı derlemenin nasıl oluşturulacağı açıklanır ve yordamdaki her adımı gösteren kod sağlanır.
Not
C# ve Visual Basic için Visual Studio IDE yalnızca tek dosyalı derlemeler oluşturmak için kullanılabilir. Çok dosyalı derlemeler oluşturmak istiyorsanız, komut satırı derleyicilerini veya Visual C++ ile Visual Studio'yu kullanmanız gerekir. Çok dosyalı derlemeler yalnızca .NET Framework tarafından desteklenir.
Çok dosyalı derleme oluşturma
Derlemedeki diğer modüller tarafından başvurulen ad alanlarını içeren tüm dosyaları kod modülleri halinde derleyin. Kod modülleri için varsayılan uzantı .netmodule'dür.
Örneğin, dosyanın adlı
myStringer
bir ad alanına sahip olduğunu ve adlı bir sınıfıStringer
içerdiğini varsayalımStringer
. sınıfı,Stringer
konsola tek bir satır yazan adlıStringerMethod
bir yöntem içerir.// 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
Bu kodu derlemek için aşağıdaki komutu kullanın:
cl /clr:pure /LN Stringer.cpp
csc /t:module Stringer.cs
vbc /t:module Stringer.vb
Modül parametresini /t: derleyici seçeneğiyle belirtmek, dosyanın derleme olarak değil modül olarak derlenmesi gerektiğini gösterir. Derleyici, bir derlemeye eklenebilen Stringer.netmodule adlı bir modül oluşturur.
Kodda başvuruda bulunan diğer modülleri belirtmek için gerekli derleyici seçeneklerini kullanarak diğer tüm modülleri derleyin. Bu adımda /addmodule derleyicisi seçeneği kullanılır.
Aşağıdaki örnekte, client adlı bir kod modülünün 1. adımda oluşturulan Stringer.netmodule modülündeki bir yönteme başvuran bir giriş noktası
Main
yöntemi vardır.#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
Bu kodu derlemek için aşağıdaki komutu kullanın:
cl /clr:pure /FUStringer.netmodule /LN Client.cpp
csc /addmodule:Stringer.netmodule /t:module Client.cs
vbc /addmodule:Stringer.netmodule /t:module Client.vb
Bu modül gelecekteki bir adımda bir derlemeye eklendiğinden /t:module seçeneğini belirtin. İstemci'deki kod Stringer.netmodule içindeki kod tarafından oluşturulan bir ad alanına başvuracağından /addmodule seçeneğini belirtin. Derleyici, Stringer.netmodule adlı başka bir modüle başvuru içeren Client.netmodule adlı bir modül oluşturur.
Not
C# ve Visual Basic derleyicileri, aşağıdaki iki farklı söz dizimini kullanarak doğrudan çok dosyalı derlemeler oluşturmayı destekler.
İki derleme, iki dosyalı bir derleme oluşturur:
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
Bir derleme iki dosyalı bir derleme oluşturur:
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
Derleme bildirimini içeren çıkış dosyasını oluşturmak için Derleme Bağlayıcısı'nı (Al.exe) kullanın. Bu dosya, derlemenin parçası olan tüm modüller veya kaynaklar için başvuru bilgilerini içerir.
Komut isteminde aşağıdaki komutu yazın:
al<module name><module name> ... /main:<method name>/out:<file name>/target:<assembly dosya türü>
Bu komutta , modül adı bağımsız değişkenleri derlemeye eklenecek her modülün adını belirtir. /main: seçeneği, derlemenin giriş noktası olan yöntem adını belirtir. /out: seçeneği, derleme meta verilerini içeren çıkış dosyasının adını belirtir. /target: seçeneği, derlemenin bir konsol uygulaması yürütülebilir (.exe) dosyası, bir Windows yürütülebilir (.win) dosyası veya kitaplık (.lib) dosyası olduğunu belirtir.
Aşağıdaki örnekte Al.exe, myAssembly.exe adlı bir konsol uygulaması yürütülebilir dosyası olan bir derleme oluşturur. Uygulama Client.netmodule ve Stringer.netmodule adlı iki modülden ve yalnızca derleme meta verilerini içeren myAssembly.exe adlı yürütülebilir dosyadan oluşur. Derlemenin giriş noktası,
Main
Client.dll'de bulunan sınıfındakiMainClientApp
yöntemidir.al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe
BIR derlemenin içeriğini incelemek veya bir dosyanın derleme mi yoksa modül mü olduğunu belirlemek için IL Disassembler (Ildasm.exe) kullanabilirsiniz.