Como carregar um assembly em tempo de execução é localizado em uma pasta que não seja a pasta bin do aplicativo

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 837908
Sumário
não é necessário colocar um assembly que um aplicativo deve usar em tempo de execução na pasta bin do aplicativo. É possível colocar o assembly em qualquer pasta no sistema e, em seguida, você pode consultar o assembly em tempo de execução.
INTRODUÇÃO
Este artigo passo a passo descreve três métodos que você pode usar para se referir aos assemblies que estão nas pastas que não são a pasta bin do aplicativo.

Requisitos

Este artigo pressupõe que você esteja familiarizado com os seguintes tópicos:
  • Geral familiaridade com o Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005 ou com o Microsoft Visual translation from VPE for Csharp .NET ou Microsoft Visual translation from VPE for Csharp 2005
  • Geral familiaridade com assemblies no Visual Basic .NET ou Visual Basic 2005 e no Visual translation from VPE for Csharp .NET ou Microsoft Visual translation from VPE for Csharp 2005
  • Geral familiaridade com arquivos .config no Visual Basic .NET ou Visual Basic 2005 e no Visual translation from VPE for Csharp .NET ou Microsoft Visual translation from VPE for Csharp 2005
A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
  • O Microsoft .NET Framework
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005

Método 1: Instalar o assembly no cache de assembly global (GAC)

O GAC é um cache de código de todo o computador onde o common language runtime está instalado. O GAC armazena os assemblies que você seleciona especificamente para ser compartilhado por vários aplicativos.

Observação Você pode instalar somente fortes assemblies no GAC.

Para instalar um assembly no GAC, execute estas etapas:
  1. Start Visual Studio .NET ou Visual Studio 2005.
  2. No menu arquivo , aponte para novo e, em seguida, clique em Project .

    A caixa de diálogo New Project é exibida.
  3. Em Project Types , clique em Visual Basic .NET ou clique em .NET translation from VPE for Csharp Visual .

    Observação No Visual Studio 2005, clique em Visual Basic ou em translation from VPE for Csharp Visual .
  4. Em modelos , clique em Class Library .
  5. Na caixa nome , digite MyAssembly1 . Na caixa Location , digite C:\Myassemblies .

    Por padrão, o arquivo Class1.vb é criado pelo Visual Basic .NET ou Visual Basic 2005. Por padrão, o arquivo Class1.cs é criado pelo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005.
  6. Adicione o seguinte código à classe Class1 do arquivo Class1.vb ou do arquivo Class1.cs.

    Visual Basic .NET ou código do Visual Basic 2005
       Public Function HelloWorld() As String      Return "From Class Library "   End Function
    translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
    public string HelloWorld(){	return "From Class Library";}
  7. No menu arquivo , clique em Salvar tudo para salvar a solução.
  8. Instale o assembly MyAssembly1 no GAC.

    Para obter mais informações sobre como fazer isso no Visual Basic. NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    315682Como instalar um assembly no cache global de assemblies no Visual Basic. NET
    Para obter mais informações sobre como fazer isso no .NET translation from VPE for Csharp Visual, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
    815808Como instalar um assembly no cache global de assemblies no Visual translation from VPE for Csharp .NET
  9. Crie um novo aplicativo cliente. Para fazer isso, execute as seguintes etapas:
    1. No Visual Studio .NET ou Visual Studio 2005, crie um novo aplicativo Visual Basic .NET ou Visual Basic 2005 Windows ou um novo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Windows aplicativo chamado TestClient1 .

      Por padrão, o arquivo Form1.vb é criado pelo Visual Basic .NET ou Visual Basic 2005. Por padrão, o arquivo Form1.cs é criado pelo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005.
    2. No Solution Explorer, clique com o botão direito do mouse Adicionar referência .

      A caixa de diálogo Add Reference é exibida.
    3. Clique em Procurar , localizar C:\MyAssembly, clique no assembly MyAssembly1 e em seguida, clique em Abrir .

      Observação Nesta etapa, C:\MyAssembly é um espaço reservado para o local real do assembly MyAssembly1.
    4. Adicione o seguinte código ao evento Form1_Load do arquivo Form1.vb ou do arquivo Form1.cs da seguinte maneira:

      Visual Basic .NET ou código do Visual Basic 2005
      Dim obj1 As New MyAssembly1.Class1()MessageBox.Show(obj1.HelloWorld())
      translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
      MyAssembly1.Class1 obj1=new MyAssembly1.Class1();MessageBox.Show(obj1.HelloWorld());
    5. No menu Debug , clique em Iniciar para criar e executar o aplicativo.

Método 2: Usar um arquivo de configuração (config) do aplicativo com as marcas <codebase>

Um arquivo .config contém as seguintes configurações:
  • Configurações específicas a um aplicativo
  • Configurações que lê o common language runtime, tais como as configurações de diretiva de ligação de assembly e as configurações de objetos do sistema de interação remota
  • Configurações que o aplicativo lê
As marcas <codebase> especificam onde o common language runtime pode encontrar um assembly. O common language runtime aplica as configurações das marcas <codebase> do arquivo .config. As configurações de marcas <codebase> determinam a versão e o o local do assembly.

Para usar um arquivo .config com as marcas <codebase> para fazer referência os assemblies, execute essas etapas:
  1. Criar um novo projeto Class Library chamado MyAssembly2 seguindo as etapas 1 a 6 do "método 1: instalar o assembly no cache global de assemblies (GAC)" seção.
  2. Verifique o assembly de nome forte.

    Para obter informações adicionais sobre como fazer isso, clique em um dos números de artigo que mencionados na etapa 8 do "método 1: instalar o assembly no cache de assembly global (GAC)" seção.
  3. Crie um novo aplicativo cliente. Para fazer isso, execute as seguintes etapas:
    1. No Visual Studio .NET ou Visual Studio 2005, crie um novo aplicativo Visual Basic .NET ou Visual Basic 2005 Windows ou um novo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Windows aplicativo chamado TestClient2.

      Por padrão, o arquivo Form1.vb é criado pelo Visual Basic .NET ou Visual Basic 2005. Por padrão, o arquivo Form1.cs é criado pelo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005.
    2. No Solution Explorer, clique com o botão direito do mouse Adicionar referência .

      A caixa de diálogo Add Reference é exibida.
    3. Clique em Procurar , clique em MyAssembly2 assembly e em seguida, clique em Abrir.
    4. Em referências , clique com o botão direito do mouse MyAssembly2 e, em seguida, clique em Propriedades .

      A janela Propriedades será exibida.
    5. Na janela Properties, defina o Copiar Local propriedade do assembly como False .
    6. Adicione o seguinte código ao evento Form1_Load do arquivo Form1.vb ou do arquivo Form1.cs da seguinte maneira:

      Visual Basic .NET ou código do Visual Basic 2005
      Dim obj2 As New MyAssembly2.Class1()MessageBox.Show(obj2.HelloWorld())
      translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
      MyAssembly2.Class1 obj2=new MyAssembly2.Class1();MessageBox.Show(obj2.HelloWorld());
    7. No menu Build , clique em Build Solution .
  4. Localize o número de atributo publicKeyToken do assembly que você criou. Para fazer isso, execute as seguintes etapas:
    1. No prompt de comando Visual Studio .NET ou Visual Studio 2005, localize a seguinte pasta:

      C:\MyAssemblies\MyAssembly2\bin\debug

      Observação Para localizar o número de atributo publicKeyToken , localize a pasta que contém seu assembly compilado biblioteca. Normalmente, isso é a pasta bin na sua pasta de projeto mencionada anteriormente nesta etapa.
    2. Digite o seguinte comando:

      SN -T MyAssembly2.dll

      Observação Você deve usar uma letra maiúscula "T" para obter a chave pública correta.

      O comando retorna um valor hexadecimal que representa o número de atributo publicKeyToken do assembly.
  5. Para localizar o número de versão do assembly, execute estas etapas:
    1. No Microsoft Windows Explorer, localize a seguinte pasta:

      C:\Myassemblies\MyAssembly2\bin\debug
    2. Clique com o botão direito no arquivo MyAssembly2.dll e, em seguida, clique em Propriedades .

      A janela Propriedades será exibida.
    3. Na janela Properties, clique na guia versão .

      Observação A versão do assembly é especificada na seção valor .
  6. Use o número de atributo publicKeyToken e o número de versão para identificar o assembly correto.

    Observação Você deve fornecer o número de atributo publicKeyToken , o número de versão e o caminho do MyAssembly2.dll arquivo que usa as marcas <codebase> para se referir ao arquivo MyAssembly2.dll em tempo de execução.
  7. Adicione um arquivo .config para o projeto. Para fazer isso, execute as seguintes etapas:
    1. No menu Project , clique em Add New Item .
    2. Na caixa de diálogo Add New Item , clique em arquivo de configuração do aplicativo em modelos .
    3. Verifique se o nome do arquivo é App.config e, em seguida, clique em Abrir .
    4. Adicione o seguinte código para o arquivo:
      <configuration>   <runtime>      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">         <dependentAssembly>            <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>            <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>         </dependentAssembly>      </assemblyBinding>   </runtime></configuration>
      Observação TestClient2.exe.config O arquivo está localizado na pasta Debug ou na pasta Release. Ambas essas pastas estão localizadas na pasta bin. O modo de configuração de solução que você selecionar determina o local do arquivo TestClient2.exe.config.
  8. Faça as alterações seguintes nas marcas <assemblyidentity>:
    1. Altere o atributo nome para o nome do seu assembly de biblioteca.
    2. Altere o atributo publicKeyToken para a chave pública que você determinou na etapa 4 desta seção.
  9. Faça as alterações seguintes nas marcas <codebase>:
    1. Altere o atributo de versão para o número de versão do assembly que você determinou na etapa 5 desta seção.
    2. Altere o atributo href para o caminho onde está localizada a DLL.
  10. No menu Debug , clique em Iniciar para criar o projeto e, em seguida, executar o aplicativo.

Método 3: Usar o evento AssemblyResolve

O evento AssemblyResolve é acionado sempre que o common language runtime tenta ligar a um assembly e falha. Você pode usar o método AddHandler para adicionar um manipulador de eventos para o aplicativo que retorna o conjunto correto sempre que AssemblyResolve evento é acionado.

O manipulador de eventos AssemblyResolve deve retornar um objeto [assembly] , e o common language runtime deve vincular a este objeto. Normalmente, você pode usar o método assembly.LoadFrom para carregar o assembly e, para retornar o objeto. Para fazer isso, execute as seguintes etapas:
  1. Criar um novo projeto Class Library chamado MyAssembly3 seguindo as etapas 1 a 7 o "método 1: instalar o assembly no cache global de assemblies (GAC)" seção.
  2. Crie um novo aplicativo cliente. Para fazer isso, execute as seguintes etapas:
    1. No Visual Studio .NET ou Visual Studio 2005, criar um novo aplicativo Visual Basic .NET ou Visual Basic 2005 Windows ou crie um novo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Windows aplicativo chamado TestClient3.

      Por padrão, o arquivo Form1.vb é criado pelo Visual Basic .NET ou Visual Basic 2005. Por padrão, o arquivo Form1.cs é criado pelo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005.
    2. Adicione um controle Button para o arquivo Form1.vb ou ao arquivo Form1.cs.
    3. Clique duas vezes no controle Button1 e, em seguida, adicione o seguinte código ao evento Button1_Click :

      Visual Basic .NET ou código do Visual Basic 2005
      Dim obj3 As New MyAssembly3.Class1()MessageBox.Show(obj3.HelloWorld())
      translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
      MyAssembly3.Class1 obj3=new MyAssembly3.Class1();MessageBox.Show(obj3.HelloWorld());
    4. No Solution Explorer, clique com o botão direito do mouse Adicionar referência .

      A caixa de diálogo Add Reference é exibida.
    5. Clique em Procurar , clique em MyAssembly3 assembly e em seguida, clique em Abrir.
    6. Na pasta referências, clique o assembly MyAssembly3 com o botão direito do mouse e, em seguida, clique em Propriedades .

      A janela Propriedades será exibida.
    7. Na janela Properties, defina o Copiar Local propriedade do assembly como False .
  3. Adicionar um manipulador de eventos para AssemblyResolve evento no evento Form1_Load da seguinte maneira:

    Visual Basic .NET ou código do Visual Basic 2005
    AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf MyResolveEventHandler
    translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005 código
    AppDomain currentDomain = AppDomain.CurrentDomain;currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
  4. Defina a função MyResolveEventHandler da seguinte maneira:
    Visual Basic .NET ou código do Visual Basic 2005
    Function MyResolveEventHandler(ByVal sender As Object, _                               ByVal args As ResolveEventArgs) As [Assembly]        'This handler is called only when the common language runtime tries to bind to the assembly and fails.                'Retrieve the list of referenced assemblies in an array of AssemblyName.        Dim objExecutingAssemblies As [Assembly]        objExecutingAssemblies = [Assembly].GetExecutingAssembly()        Dim arrReferencedAssmbNames() As AssemblyName        arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies()        'Loop through the array of referenced assembly names.        Dim strAssmbName As AssemblyName        For Each strAssmbName In arrReferencedAssmbNames            'Look for the assembly names that have raised the "AssemblyResolve" event.            If (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) = args.Name.Substring(0, args.Name.IndexOf(","))) Then                'Build the path of the assembly from where it has to be loaded.                Dim strTempAssmbPath As String                strTempAssmbPath = "C:\assemblies\" & args.Name.Substring(0, args.Name.IndexOf(",")) & ".dll"							                       Dim MyAssembly as [Assembly]                 'Load the assembly from the specified path.                 MyAssembly = [Assembly].LoadFrom(strTempAssmbPath)                'Return the loaded assembly.                Return MyAssembly            End If        Next    End Function
    código translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 visual
    	private Assembly MyResolveEventHandler(object sender,ResolveEventArgs args){	//This handler is called only when the common language runtime tries to bind to the assembly and fails.	//Retrieve the list of referenced assemblies in an array of AssemblyName.	Assembly MyAssembly,objExecutingAssemblies;	string strTempAssmbPath="";	objExecutingAssemblies=Assembly.GetExecutingAssembly();	AssemblyName [] arrReferencedAssmbNames=objExecutingAssemblies.GetReferencedAssemblies();				//Loop through the array of referenced assembly names.	foreach(AssemblyName strAssmbName in arrReferencedAssmbNames)	{		//Check for the assembly names that have raised the "AssemblyResolve" event.		if(strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(","))==args.Name.Substring(0, args.Name.IndexOf(",")))		{			//Build the path of the assembly from where it has to be loaded.							strTempAssmbPath="C:\\Myassemblies\\"+args.Name.Substring(0,args.Name.IndexOf(","))+".dll";			break;		}	}	//Load the assembly from the specified path. 						MyAssembly = Assembly.LoadFrom(strTempAssmbPath);						//Return the loaded assembly.	return MyAssembly;			}
  5. No menu Debug , clique em Iniciar para executar o aplicativo.

    Observação Você deve importar o namespace System.Reflection para executar este aplicativo.
  6. Clique em Button1 para chamar o método HelloWorld() do assembly MyAssembly3 .
Referências
Para obter informações adicionais sobre como especificar local do assembly, visite o seguinte site da Web Microsoft Developer Network (MSDN):Para obter informações adicionais sobre o elemento <codebase>, visite o seguinte site da MSDN:Para obter informações adicionais sobre como o runtime localiza assemblies, visite o seguinte site da MSDN: Para obter informações adicionais sobre o AppDomain.AssemblyResolve eventos, visite o seguinte site da MSDN:

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 837908 - Última Revisão: 11/27/2007 03:42:49 - Revisão: 2.9

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbevent kbconfig kbxml kbdll kbcomplusobj kbhowtomaster KB837908 KbMtpt
Comentários