Sdílet prostřednictvím


Postupy: Sestavení vícesouborového sestavení

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Tento článek vysvětluje, jak vytvořit vícesouborové sestavení a poskytuje kód, který znázorňuje jednotlivé kroky v postupu.

Poznámka:

Integrované vývojové prostředí sady Visual Studio pro C# a Visual Basic lze použít pouze k vytváření sestavení s jedním souborem. Pokud chcete vytvořit vícesouborová sestavení, musíte použít kompilátory příkazového řádku nebo Visual Studio se sadou Visual C++. Vícesouborová sestavení jsou podporována pouze rozhraním .NET Framework.

Vytvoření vícesouborového sestavení

  1. Zkompilujte všechny soubory, které obsahují obory názvů odkazované jinými moduly v sestavení, do modulů kódu. Výchozí rozšíření modulů kódu je .netmodule.

    Řekněme například, že Stringer soubor má název myStringeroboru názvů , který zahrnuje třídu s názvem Stringer. Třída Stringer obsahuje metodu, která volá StringerMethod jeden řádek do konzoly.

    // 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. Ke kompilaci tohoto kódu použijte následující příkaz:

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

    Zadání parametru modulu s možností kompilátoru /t: označuje, že soubor by měl být zkompilován jako modul, nikoli jako sestavení. Kompilátor vytvoří modul s názvem Stringer.netmodule, který lze přidat do sestavení.

  3. Zkompilujte všechny ostatní moduly pomocí nezbytných možností kompilátoru, abyste označili ostatní moduly, na které se odkazuje v kódu. Tento krok používá možnost kompilátoru /addmodule .

    V následujícím příkladu má modul kódu s názvem Client metodu vstupního bodu Main , která odkazuje na metodu v modulu Stringer.netmodule vytvořeném v kroku 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. Ke kompilaci tohoto kódu použijte následující příkaz:

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

    Zadejte možnost /t:module, protože tento modul se přidá do sestavení v budoucím kroku. Zadejte možnost /addmodule, protože kód v klientovi odkazuje na obor názvů vytvořený kódem v Stringer.netmodule. Kompilátor vytvoří modul s názvem Client.netmodule , který obsahuje odkaz na jiný modul Stringer.netmodule.

    Poznámka:

    Kompilátory jazyka C# a Visual Basic podporují přímé vytváření vícesouborových sestavení pomocí následujících dvou různých syntaxí.

    Dvě kompilace vytvoří sestavení se dvěma soubory:

    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
    

    Jedna kompilace vytvoří sestavení se dvěma soubory:

    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. Pomocí linkeru sestavení (Al.exe) vytvořte výstupní soubor, který obsahuje manifest sestavení. Tento soubor obsahuje referenční informace pro všechny moduly nebo prostředky, které jsou součástí sestavení.

    Do příkazového řádku zadejte následující příkaz:

    al<název<>modulu ...> /main:<method name>/out:<file name>/target:<assembly file type>

    V tomto příkazu určují argumenty názvu modulu název každého modulu, který se má zahrnout do sestavení. Možnost /main: určuje název metody, která je vstupním bodem sestavení. Možnost /out: určuje název výstupního souboru, který obsahuje metadata sestavení. Možnost /target: určuje, že sestavení je spustitelný soubor konzolové aplikace (.exe), spustitelný soubor systému Windows (.win) nebo soubor knihovny (.lib).

    V následujícím příkladu Al.exe vytvoří sestavení, které je spustitelný soubor konzolové aplikace s názvem myAssembly.exe. Aplikace se skládá ze dvou modulů s názvem Client.netmodule a Stringer.netmodule a spustitelného souboru s názvem myAssembly.exe, který obsahuje pouze metadata sestavení. Vstupním bodem sestavení je Main metoda ve třídě MainClientApp, která je umístěna v Client.dll.

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

    K prozkoumání obsahu sestavení můžete použít IL Disassembler (Ildasm.exe), nebo určit, zda je soubor sestavení nebo modul.

Viz také