Há um pacote com o qual tenho que lidar que instala os assemblies diretamente no GAC (por exemplo, em algum lugar profundo em% windows% / assembly).
Como exorcizo o assembly real (a DLL) do GAC no sistema de arquivos normal?
Obrigado.
Há um pacote com o qual tenho que lidar que instala os assemblies diretamente no GAC (por exemplo, em algum lugar profundo em% windows% / assembly).
Como exorcizo o assembly real (a DLL) do GAC no sistema de arquivos normal?
Obrigado.
Respostas:
Eu usei os conselhos deste artigo para obter uma assembléia no GAC.
Obtenha a DLL do GAC
As DLLs implantadas no GAC (normalmente localizadas em c: \ windows \ assembly) não podem ser exibidas ou usadas como um arquivo DLL normal. Eles não podem ser referenciados diretamente do projeto VS. Os desenvolvedores geralmente mantêm uma cópia do arquivo DLL original e se referem a ele no projeto no momento do desenvolvimento (design), que usa o assembly do GAC durante o tempo de execução do projeto.
Durante a execução (tempo de execução), se o assembly for assinado e implantado no GAC, o CLR selecionará automaticamente o assembly do GAC em vez da DLL mencionada durante o tempo de design no VS. Caso o desenvolvedor tenha excluído a DLL original ou não a tenha por algum motivo, existe uma maneira de obter o arquivo DLL do GAC. Siga as etapas a seguir para copiar a DLL do GAC
Execute regsvr32 / u C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ shfusion.dll
- shfusion.dll é uma DLL de extensão do explorer que oferece uma aparência distinta à pasta GAC. O cancelamento do registro deste arquivo removerá o visualizador de cache de assembly e a pasta GAC ficará visível como qualquer pasta normal no explorer.
Abra "% windir% \ assembly \ GAC_MSIL".
Navegue até a pasta DLL para encontrar sua DLL.
Copie a DLL em algum lugar do seu disco rígido e consulte-a no seu projeto
Execute "regsvr32% windir% \ Microsoft.NET \ Framework \ <diretório da versão .NET> \ shfusion.dll" para registrar novamente o arquivo shfusion.dll e recuperar a visão distinta original do GAC.
shfusion.dll
que não suporta o DllInstall()
ponto de entrada chamado regsvr32
quando passou a /i
opção. Omitir essa opção permite registrar novamente o componente com sucesso.
O método descrito aqui é muito fácil:
Resumo do artigo:
\\YourServer\C$\Windows\Assembly
)Abra o prompt de comando e digite:
cd c:\windows\assembly\GAC_MSIL
xcopy . C:\GacDump /s /y
Isso deve fornecer o despejo de todo o GAC
Aproveitar!
Sim.
Adicionar chave de registro DisableCacheViewer
Crie uma nova chave dword em HKLM \ Software \ Microsoft \ Fusion \ com o nome DisableCacheViewer e defina seu valor [DWORD] como 1.
Volte ao Windows Explorer para a pasta assembly e será a visualização normal do sistema de arquivos.
Eu acho que a maneira mais fácil é fazê-lo através da linha de comando, como David menciona. O único truque é que a DLL não está simplesmente localizada em C: \ Windows \ Assembly. Você precisa navegar para C: \ Windows \ Assembly \ GAC \ [ASSEMBLY_NAME] \ [VERSION_NUMBER] _ [PUBLIC KEY]. Você pode fazer uma cópia usando:
copie [ASSEMBLY_NAME] .dll c: \ (ou qualquer local que você quiser)
Espero que ajude.
A maneira mais fácil que encontrei é abrir o prompt de comando e navegar pela pasta mencionada até encontrar a DLL desejada - você pode usar o comando de cópia para removê-lo. O Windows Explorer tem uma exibição especial "útil" desta pasta.
Abra EXECUTAR e digite %windir%\assembly\GAC_MSIL
: isso abrirá suas DLLs no modo de exibição de pastas. Você pode navegar até sua pasta nomeada DLL e abri-la. Você encontrará seu arquivo DLL e copiará-o facilmente.
Eu sou o autor do PowerShell GAC . Com o PowerShell GAC, você pode extrair montagens do GAC sem depender dos componentes internos do GAC, como alterar as estruturas de pastas.
Get-GacAssembly SomeCompany* | Get-GacAssemblyFile | Copy-Item -Dest C:\Temp\SomeCompany
Esta postagem do blog do MSDN descreve três maneiras distintas de extrair uma DLL do GAC. Um resumo útil dos métodos até agora apresentados.
Acho que descobri uma maneira de analisar o interior do GAC sem modificar o registro ou usar a linha de comando, o PowerShell ou qualquer outro programa:
Crie um novo atalho (para qualquer lugar). Em seguida, modifique o atalho para que o destino seja:
%windir%\assembly\GAC_MSIL\System
A abertura desse atalho leva você para a pasta Sistema dentro do GAC (que todos deveriam ter) e tem o maravilhoso efeito colateral de permitir que você alterne para um diretório mais alto e depois navegue para qualquer outra pasta desejada (veja os arquivos DLL, etc.)
Eu testei isso no Windows 7 e Windows Server 2012.
Nota: Ele não permitirá que você use esse destino ao criar o atalho, mas permitirá que você o edite.
Aproveitar!
Em um script do Powershell, você pode tentar isso. Eu só tinha uma única versão do assembly no GAC, então isso funcionou perfeitamente.
cd "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\"
Get-ChildItem assemblypath -Recurse -Include *.dll | Copy-Item -Destination "c:\folder to copy to"
onde o caminho do assembly pode usar caracteres curinga.
Uma outra direção - basta descompactar o arquivo MSI e obter os benefícios dessa maneira. Salva você da eventual desinstalação. . .
Copiar de uma linha de comando é desnecessário. Eu digitei o nome da DLL na pesquisa da Janela Iniciar. Eu escolhi Ver mais resultados. O do GAC foi retornado na janela de pesquisa. Cliquei com o botão direito do mouse e disse o local do arquivo aberto. Ele foi aberto no Windows Explorer normal. Eu copiei o arquivo. Fechei a janela. Feito.