Aracılığıyla paylaş


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

  1. 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ı myStringerbir ad alanına sahip olduğunu ve adlı bir sınıfı Stringeriç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
    
  2. 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.

  3. 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
    
  4. 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
    
  5. 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ındaki MainClientAppyö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.

Ayrıca bkz.