Pergunta

Temos um aplicativo da Web implantado em muitos sites com apenas alterações de front -end, a parte de back -end compartilhada tem sua DLL no GAC, para que tenhamos que atualizar que uma DLL e todos os sites recebam a atualização.

Existe uma maneira de substituir o GAC por uma DLL na pasta /bin para testar novos recursos antes de serem lançados?

Foi útil?

Solução

Se tiver o mesmo número de versão que a DLL referenciada, o GAC será usado.

Se você aumentar o número da versão, reconstruir o site que referencia o novo número da versão, coloque a nova versão no diretório /bin e a DLL será usada.

Se você não deseja alterar o número da versão, está praticamente sem sorte.

Quando o .NET carrega assemblies nomeados fortes, primeiro ele tenta decidir qual número de versão usar. Faz isso através da referência primeiro, depois procura Políticas de editores, então procura Redirecionamentos de ligação No arquivo de configuração.

Depois disso, ele procura a assembléia no GAC, então em qualquer CodeBase especificada, então investiga várias pastas do sistema de arquivos para a DLL. Se, em qualquer uma dessas etapas, encontrar o conjunto da versão correta, ele para.

Se você não estiver alterando o número da versão do seu forte Assembly, o .NET encontrará o original no GAC e pare de procurar. Observe que, porque ele para quando encontra um, e porque procurar no GAC é o primeiro, a especificação de uma base de código para sua montagem não fará bem, a menos que você também especifique um novo número de versão.

Outras dicas

Consegui substituir o GAC pela montagem na pasta bin usando o <codebase>Elemento.

Especificando <codebase version="1.2.3.4" href="/bin/MyAssembly.dll" /> No meu arquivo web.config, posso dizer ao meu aplicativo para usar esta versão em vez da versão especificada no GAC.

Você também pode querer dar uma olhada no <probing>Elemento para especificar locais de montagem?

Eu acho que posso estar dizendo o mesmo que pensa como Adam Sills, mas re-autotou para o meu entendimento. Através dos meus próprios testes, parece que isso acontece:

  • Se o seu aplicativo for compilado com a versão 1.0.0.0 e 1.0.0.1 estiver no GAC, você poderá omitir o .dll do seu /bin.
  • Se o seu aplicativo for compilado com a versão 1.0.0.1 e 1.0.0.0 estiver no GAC, você deverá colocar o .dll em sua /lata para ignorar o GAC. Um erro ocorrerá se a versão GAC for mais antiga que a versão necessária do seu aplicativo, a menos que você inclua a versão mais recente no seu /BIN.

Eu espero que isto esteja correto...

Você pode visualizar as informações de ligação no arquivo de log usando o visualizador de log de ligação à montagem (fuslogvw.exe), incluído no Windows Software Development Kit (SDK).

s

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top