Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Observação
Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
Este artigo explica como criar um assembly multifile e fornece exemplos de código que ilustram cada etapa do procedimento.
Observação
O IDE do Visual Studio para C# e o Visual Basic só pode ser usado para criar assemblies de arquivo único. Se você quiser criar assemblies de vários arquivos, deverá usar os compiladores de linha de comando ou o Visual Studio com o Visual C++. As assemblies multifile são compatíveis apenas com o .NET Framework.
Criar um assembly de vários arquivos
Compile todos os arquivos que contêm namespaces referenciados por outros módulos no assembly em módulos de código. A extensão padrão para módulos de código é .netmodule.
Por exemplo, digamos que o
Stringerarquivo tenha um namespace chamadomyStringer, que inclui uma classe chamadaStringer. AStringerclasse contém um método chamadoStringerMethodque grava uma única linha no console.// 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 NamespaceUse o seguinte comando para compilar este código:
cl /clr:pure /LN Stringer.cppcsc /t:module Stringer.csvbc /t:module Stringer.vbEspecificar o parâmetro do módulo com a opção
/t:do compilador indica que o arquivo deve ser compilado como um módulo e não como um assembly. O compilador produz um módulo chamado Stringer.netmodule, que pode ser adicionado a um assembly.Compile todos os outros módulos usando as opções necessárias do compilador para indicar os outros módulos referenciados no código. Esta etapa usa a opção do
/addmodulecompilador.No exemplo a seguir, um módulo de código chamado Client tem um método de ponto
Mainde entrada que faz referência a um método no módulo Stringer.netmodule criado na etapa 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 ClassUse o seguinte comando para compilar este código:
cl /clr:pure /FUStringer.netmodule /LN Client.cppcsc /addmodule:Stringer.netmodule /t:module Client.csvbc /addmodule:Stringer.netmodule /t:module Client.vbEspecifique a opção
/t:moduleporque este módulo será adicionado a um assembly em uma etapa futura. Especifique a opção/addmoduleporque o código no Cliente faz referência a um namespace criado pelo código em Stringer.netmodule. O compilador produz um módulo chamado Client.netmodule que contém uma referência a outro módulo, Stringer.netmodule.Observação
Os compiladores C# e Visual Basic dão suporte diretamente à criação de assemblies multifile usando as duas sintaxes diferentes a seguir.
Duas compilações criam uma assemblagem de dois arquivos.
cl /clr:pure /LN Stringer.cpp cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodulecsc /t:module Stringer.cs csc Client.cs /addmodule:Stringer.netmodulevbc /t:module Stringer.vb vbc Client.vb /addmodule:Stringer.netmoduleUma compilação gera um assembly composto por dois arquivos.
cl /clr:pure /LN Stringer.cpp cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodulecsc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.csvbc /out:Client.exe Client.vb /out:Stringer.netmodule Stringer.vbUtilize o Assembly Linker (Al.exe) para criar o arquivo de saída que contém o manifesto do assembly. Esse arquivo contém informações de referência para todos os módulos ou recursos que fazem parte do assembly.
No prompt de comando, digite o seguinte comando:
al< nome do módulo>< nome do módulonome do módulo> …/main:< nome do método>/out:<nome do arquivo>/target:<assembly file type>Nesse comando, os argumentos de nome do módulo especificam o nome de cada módulo a ser incluído no assembly. A
/main:opção especifica o nome do método que é o ponto de entrada do assembly. A/out:opção especifica o nome do arquivo de saída, que contém metadados de assembly. A/target:opção especifica que o assembly é um arquivo executável do aplicativo de console (.exe), um arquivo executável do Windows (.win) ou um arquivo de biblioteca (.lib).No exemplo a seguir, Al.exe cria um assembly que é um executável de aplicativo de console chamado myAssembly.exe. O aplicativo consiste em dois módulos chamados Client.netmodule e Stringer.netmodule e o arquivo executável chamado myAssembly.exe, que contém apenas metadados de assembly. O ponto de entrada do assembly é o método
Mainna classeMainClientApp, localizada em Client.dll.al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exeVocê pode usar IL Disassembler (Ildasm.exe) para examinar o conteúdo de um assembly ou determinar se um arquivo é um assembly ou um módulo.