Aracılığıyla paylaş


Nasıl yapılır: Çok dosyalı derleme oluşturma

Uyarı

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.

Uyarı

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ı Stringerbir ad alanına sahip olduğunu ve adlı bir sınıfı myStringeriçerdiğini varsayalımStringer. Bu sınıf, konsola tek bir satır yazan bir yöntem olan StringerMethod 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
    

    Derleyici seçeneğiyle modül parametresinin /t: belirtilmesi, 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ım derleyici seçeneğini kullanır /addmodule .

    Aşağıdaki örnekte, client adlı bir kod modülünün 1. adımda oluşturulan Main modülündeki bir yönteme başvuran bir giriş noktası 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
    

    /t:module Bu modül gelecekteki bir adımda bir derlemeye eklendiğinden seçeneğini belirtin. /addmodule seçeneğini belirtin çünkü İstemci içindeki kod, Stringer.netmodule içindeki kod tarafından oluşturulan bir ad alanına başvurur. Derleyici, Stringer.netmodule adlı başka bir modüle başvuru içeren Client.netmodule adlı bir modül oluşturur.

    Uyarı

    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 istemine aşağıdaki komutu yazın:

    al < modül adı><modül adı> … /main: < yöntem adı>/out:<dosya adı>/target:<derleme 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 dosyası (.exe) dosyası, bir Windows yürütülebilir dosyası (.win) dosyası veya bir kitaplık (.lib) dosyası olduğunu belirtir.

    Aşağıdaki örnekte Al.exe, myAssembly.exe adlı yürütülebilir dosyaya sahip bir konsol uygulaması derlemesi oluşturur. Uygulama Client.netmodule ve Stringer.netmodule adlı iki modülden ve yalnızca derleme meta verilerini içeren myAssembly.exeadlı yürütülebilir dosyadan oluşur. Derlemenin giriş noktası, Main yönteminin MainClientApp sınıfında, Client.dll içinde bulunduğu yerdir.

    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 bakınız