Como consumir os assemblies que são localizados em uma pasta que seja diferente da pasta aplicativo básico no Visual Basic .NET ou no Visual Basic 2005

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: 897297
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
INTRODUÇÃO
Este artigo descreve como consumir os assemblies que estão localizados em uma pasta que é diferente da pasta base do aplicativo em uma solução Microsoft Visual Basic .NET ou Microsoft Visual Basic 2005.
Mais Informações
Quando você executa um aplicativo Visual Basic .NET ou Visual Basic 2005, espera que o common language runtime (CLR) localizar todos os assemblies que o aplicativo usa em cache de assembly global ou a pasta de aplicativo. Com êxito, o CLR não vincular a um assembly, você recebe uma mensagem de erro semelhante à seguinte:
System.IO.FileNotFoundException. arquivo ou assembly nome AssemblyName ou uma de suas dependências, não foi encontrado.
Você pode usar vários métodos para localizar um assembly localizado em uma pasta diferente. Este artigo descreve três métodos a seguir.

Método 1: Instalar os assemblies no cache global de assemblies

Este método requer que você assinar um assembly com um nome forte. Para assinar um assembly com um nome de alta segurança e para instalar o assembly no cache de assembly global, execute estas etapas:
  1. Nomeie um assembly usando um nome forte. Para fazer isso, execute as seguintes etapas:
    1. Use a ferramenta Strong Name (sn.exe) que acompanha o Microsoft .NET Framework software development kit (SDK) para gerar um par de chaves criptográficas.

      No Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005 Command Prompt, digite o seguinte comando:
      sn k - AssemblyName .snk
      Este comando gera e armazena um par de chaves em um arquivo chamado .snk AssemblyName.
    2. Inclua o seguinte atributo de nível de assembly no código-fonte (AssemblyInfo.vb):
      <Assembly: AssemblyKeyFile("AssemblyName.snk")>
  2. Use o global assembly Cache Tool (Gacutil.exe) para registrar o assembly do .NET Framework no cache global de assemblies. Para fazer isso, digite o seguinte comando no Visual Studio .NET prompt de comando:
    gacutil /i AssemblyName .dll
Para obter mais informações sobre como trabalhar com módulos (assemblies) e com o cache global de assemblies, visite o seguinte Microsoft Developer Network (MSDN) site:Para obter mais informações sobre como assinar um assembly com um nome forte, visite o seguinte site da MSDN: Observação Esse método pode ser difícil e demorado se muitos assemblies existem e se os assemblies têm dependências nos objetos COM (Component Object Model). Dependências de assembly também devem ser detectáveis pelo CLR. Portanto, se você planeja instalar o assembly no cache de assembly global, também instale as dependências do assembly no cache global de assemblies.

Método 2: Usar um arquivo Application.Config junto com a marca CodeBase

Usando um arquivo de configuração de aplicativo, você pode especificar o local em que o CLR deve procurar por assemblies dependentes. Especificamente, use a marca codebase . Usando essa marca, você pode colocar seus assemblies em uma pasta separada. No entanto, este método ainda requer que você nomeie o assembly de biblioteca usando um nome forte. Para usar o arquivo de configuração do aplicativo, execute estas etapas:
  1. Compile o assembly de biblioteca.
  2. Assina o assembly usando um nome forte.
  3. Do seu aplicativo principal, adicione uma referência ao seu assembly de biblioteca e, em seguida, compilar o aplicativo principal.
  4. Obter o token de chave público do seu assembly de biblioteca fortemente nomeado. Para fazer isso, execute as seguintes etapas:
    1. Clique em Iniciar , clique em Todos os programas e, em seguida, clique em Microsoft Visual Studio .NET 2003 .

      Observação No Visual Studio 2005, clique em Iniciar , clique em todos os programas e, em seguida, clique em Microsoft Visual Studio 2005 .
    2. Clique em Visual Studio .NET Tools e clique em Prompt de comando do Visual Studio .NET 2003 .

      Observação No Visual Studio 2005, clique em Visual Studio 2005 Tools e clique em Visual Studio .NET 2005 Command Prompt .
    3. Altere o diretório para o local do seu assembly de biblioteca. Normalmente, o local é a Lixeira pasta do seu projeto de assembly de biblioteca.
    4. Digite o seguinte comando e pressione ENTER:
      SN -T MyLibrary .dll
      Observação Substitua MyLibrary com o nome do seu assembly de biblioteca. Para certificar-se que o valor correto é retornado, certificar de que você usa um T em maiúsculas a -T alternar.
    5. Esse comando retorna um valor hexadecimal que representa o token de chave pública do seu assembly de biblioteca. Faça uma cópia do valor hexadecimal que será usado no arquivo de configuração do aplicativo.
  5. Obtenha a versão assembly do seu assembly de biblioteca fortemente nomeado. Para obter a versão de assembly, use um dos seguintes métodos:
    • Propriedades do arquivo método A: Windows Explorer
      1. No Windows Explorer, clique com o botão direito do assembly de biblioteca e, em seguida, clique em Propriedades .
      2. Na caixa de diálogo Propriedades , clique na guia versão .
      3. Em outras informações de versão , clique em Versão de assembly . Faça uma cópia desse valor de versão que será usado no arquivo de configuração do aplicativo.
    • Desassemblador do MSIL do método B: (ILDASM)
      1. No Visual Studio .NET 2003 prompt de comando, digite ILDASM e em seguida, pressione ENTER.
      2. No menu arquivo , clique em Abrir .
      3. Clique em seu assembly personalizado e, em seguida, clique em Abrir .
      4. No painel inferior, localize a versão de assembly (. ver). A seguir está um exemplo da versão de assembly:
        .assembly yourAssemblyName{  .ver 1:0:1969:29451}
        Observação neste exemplo, a versão do assembly é 1.0.1969.29541.
  6. Crie um arquivo de configuração de aplicativo. Para fazer isso, execute as seguintes etapas:
    1. Cole o seguinte código XML no bloco de notas:
      <configuration>   <runtime>      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">         <dependentAssembly>            <assemblyIdentity name="MyLibrary"                              culture="neutral"                               publicKeyToken="fa4e781ae585ee8a"/>            <codeBase version="1.0.1074.32347"		        href="FILE://C:/assemblies/myLibrary.dll"/>         </dependentAssembly>      </assemblyBinding>   </runtime></configuration>
    2. Altere os seguintes atributos de elemento XML.
      Atributo de elementoFazer essa alteração
      nome assemblyIdentity Alterar MyLibrary para o nome do seu assembly de biblioteca.
      publicKeyToken assemblyIdentity Altere o atributo publicKeyToken para o valor token público da chave que você copiou na etapa 4.
      codeBase versão Altere o atributo de versão para o valor versão que você copiou na etapa 5.
      codeBase href Altere o atributo href para apontar para o nome do caminho completo e o nome de arquivo do seu assembly de biblioteca.
    3. Salve o arquivo como o principal assembly de nome de arquivo .exe. Use .config como a extensão de nome de arquivo. Por exemplo, se seu assembly principal for chamado "MyProject.exe", o nome de arquivo de configuração de aplicativo é "MyProject.exe.config." Você deve salvar este arquivo na mesma pasta em que o aplicativo assembly principal está localizado.
Para obter mais informações, visite os seguintes sites da MSDN:

Método 3: Use o método System.Reflection.Assembly.LoadFrom

Esse método usa o método assembly.LoadFrom para carregar explicitamente um assembly um nome de caminho totalmente qualificado e um nome de arquivo totalmente qualificado. Para fazer isso, execute as seguintes etapas:
  1. Compile o assembly de biblioteca.
  2. Usar código semelhante ao exemplo de código seguinte para carregar o assembly:
    Dim yourAssembly As System.Reflection.Assembly = _      System.Reflection.Assembly.LoadFrom("c:\yourAssembly.dll")
Observação Se você tiver qualquer assemblies dependentes, você deve localizá-los no mesmo caminho onde está localizado o assembly principal.

Para obter mais informações sobre o método assembly.LoadFrom , visite o seguinte site da MSDN:

Método 4: Usar o evento AssemblyResolve

O evento AssemblyResolve ocorre sempre que o CLR tenta ligar a um assembly sem êxito. Use o método AddHandler no aplicativo para adicionar um manipulador de eventos que retorna o conjunto correto sempre que ocorrer o evento AssemblyResolve .

Observação Esse método não não exigem que você nomeie os assemblies usando nomes de alta segurança.

O manipulador de eventos AssemblyResolve deve retornar um objeto [assembly] que representa o assembly para os quais o CLR deve vincular. Normalmente você pode usar o método assembly.LoadFrom para carregar o assembly. Em seguida, retorna o assembly carregado.

Observação O manipulador de eventos deve estar localizado em um procedimento que não contém qualquer referência aos assemblies realocados. Além disso, o manipulador de eventos deve ser chamado antes que qualquer código que depende dos assemblies realocados é chamado.

O código a seguir é um exemplo de um aplicativo que carrega um assembly usando o evento AssemblyResolve :
Module Module1    Sub Main()        Dim f As Form1        'Set up event handler for AssemblyResolve event        AddHandler AppDomain.CurrentDomain.AssemblyResolve, _                   AddressOf MyResolveEventHandler        f = New Form1()        Application.Run(f)    End Sub    Function MyResolveEventHandler(ByVal sender As Object, _                                   ByVal args As ResolveEventArgs) As [Assembly]        'Load the assembly from the correct location and return the assembly        'This handler is only called if we try to bind to the assembly and the attempt fails.        Dim MyAssembly As [Assembly]        MyAssembly = [Assembly].LoadFrom("C:\assemblies\MyLibrary.dll")        Return MyAssembly    End FunctionEnd Module'Some sample code in Form1 which depends on the external assemblyPrivate Sub Button1_Click(ByVal sender As System.Object, _                          ByVal e As System.EventArgs) Handles Button1.Click        Dim x As MyLibrary.Application        x = New MyLibrary.Application()        x.MyMethod()    End SubEnd Class
para obter mais informações sobre o evento AppDomain.AssemblyResolve , visite o seguinte site da MSDN:
Referências
Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
302340Como criar um assembly com um nome forte no .NET Framework SDK
Falha de GAC

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 897297 - Última Revisão: 12/09/2015 02:24:51 - Revisão: 2.7

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbnosurvey kbarchive kbmt kbvs2005swept kbvs2005applies kbprogramming kbhowto kbinfo KB897297 KbMtpt
Comentários