Erro adicionando arquivo de política ao GAC
Pergunta
Estou tentando adicionar um arquivo de política do editor ao GAC de acordo com este fio Mas estou tendo problemas quando tento adicionar o arquivo no meu servidor de teste.
Eu recebo "um módulo especificado no manifesto da Assembléia 'Política.3.0.ASSEMBLYNAME.DLL' não foi possível encontrar"
Meu arquivo de política se parece com o seguinte:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="*assemblyname*"
publicKeyToken="7a19eec6f55e2f84"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0"
newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Por favor ajude!
Obrigado
Ben
Eu recriei o problema do zero com uma nova montagem que não tem dependência (além dos padrões) - tudo funciona bem na minha máquina de desenvolvimento local (e redireciona também bem), mas dá o mesmo erro adicionando o arquivo de política ao GAC No servidor!
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="TestAsm"
publicKeyToken="5f55456fdcc9b528"
culture="neutral" />
<bindingRedirect oldVersion="3.0.0.0"
newVersion="3.0.0.1"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
ligado da seguinte maneira
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /link:PublisherPolicy.xml /out:policy.3.0.TestAsm.dll /keyfile:..\..\key.snk /version:3.0.0.0
pause
Por favor ajude!
Solução
Uau - ok entendeu.
Eu deveria ter prestado mais atenção exatamente ao que isso significava
(MSDN) Como: criar uma política de editores
NOTA IMPORTANTE: A Assembléia da Política do Publicador não pode ser adicionada ao cache global da Assembléia, a menos que o arquivo de política original do editor esteja localizado no mesmo diretório que a Assembléia.
Esse requisito é, francamente, tão bizarro que não se registrou. O arquivo de política original, que foi compilado na Assembléia que estou tentando adicionar ao GAC, deve estar na mesma pasta que a Assembléia de Políticas ao adicionar a Assembléia de Políticas.
Outras dicas
Ok ... só quero verificar alguns básicos ....
Você definitivamente tem as duas versões da montagem dependente instalada no GAC?
E você verificou que os números da versão no atributo [Assembly: AssemblyVersion ()] estão corretos.
E você usou [Assembly: AssemblyVersion()] e NÃO conjunto: AssemblyFileVersion("1.0.0.1")].
Atualizar: Meu erro, você só precisa da versão mais recente da Assembléia no GAC. Eu apenas tentei isso aqui e funciona. Meus únicos outros pensamentos são verificar se os tokens de chave pública são os mesmos e que você não invadiu errado o nome da assembléia.
Além disso, quando você gerar o arquivo de política, certifique -se de usar a chave /versão no vinculador de montagem para definir explicitamente o número da versão como 3.0.0.0 E Não especifique o interruptor /plataforma. por exemplo
al.exe /link:assembly.config /out:policy.3.0.assembly.dll
/keyfile:mykey.snk /version:3.0.0.0
Para adicionar assembléias de políticas ao GAC usando o Wise, você faz a mesma coisa que faz para adicionar a Assembléia para a qual a política é. Assim, você adiciona a assembléia de políticas ao "cache de montagem global" em sábio e, desde que você tenha o arquivo de política (.config) no mesmo local da máquina, o Wise também o adicionará automaticamente ao GAC.