Solução para problema: “FileNotFoundException” Com o meu receptor de recurso.

Eu estava trabalhando em um recurso na semana passada que gostaria de acrescentar alguns receptores de evento para uma instância de lista específica. (Eu blogged um pouco sobre esse receptor de lista aqui).

Usando a linha de comando, Eu poderia instalar o recurso sem erros (mas veja abaixo o erro oculto). Quando eu tentei implantar o recurso no site, MOSS queixou-se de um "FileNotFoundException" erro. Esta entrada de blog descreve como eu resolvi isso.

Este é o erro que MOSS mostrou-me no navegador da web:

Recurso ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ não pôde ser instalado porque o carregamento de assembly de receptor de eventos "xyzzyFeatureReceiver_0" Falha: System.IO.FileNotFoundException: Não foi possível carregar arquivo ou assembly ' xyzzyFeatureReceiver_0’ ou uma de suas dependências. O sistema não pode encontrar o arquivo especificado.
Nome do arquivo: ' xyzzyFeatureReceiver_0’
em System.Reflection.Assembly.nLoad(Nome de arquivo de AssemblyName, Base de código de seqüência de caracteres, Evidência assemblySecurity, Montagem locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
em System.Reflection.Assembly.InternalLoad(AssemblyString de Cadeia de caracteres, Evidência assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
no Load(AssemblyString de Cadeia de caracteres)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
AVI: Log de vinculação conjunto está activado OFF.
Para habilitar o log de falha bind assembly, Defina o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Para 1.
Observação: Há alguma penalidade de desempenho associada assembly vincular falha log.
Para desativar esse recurso, Remova o valor do registro [HKLMSoftwareMicrosoftFusion!EnableLog].

Solucionar problemas com o Windows SharePoint Services.

Eu sei como deliberadamente causar esse erro: Não instalar o assembly no GAC. Mas, foi no GAC. Eu normalmente instalar assemblies no GAC arrastando-os para o c:\WINDOWSassembly. pasta usando o windows explorer. Eu nunca senti 100% confortável fazendo isso porque eu sempre pensei que gacutil existiu por uma razão … Então, eu tentei isso. Isso não fez diferença.

Eu procurei a internete e encontrei este post: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

O cartaz aconteceu estar usando o mesmo bit de raiz do código (do livro WSS dentro desta lista) Então isso foi um sinal de esperança. No entanto, a sugestão de decorar o assembly com um [montagem: ] directiva não fazia sentido para mim. Eu tentei de qualquer maneira e eu estava certo. Isso não fez diferença.

Então eu notei que a minha definição de classe não era pública. Eu fiz isso público e que não fez diferença.

Próximo, Eu fui para o problema de habilitar o log de falha de ligação, montagem"" (seguindo as instruções úteis e precisas fornecidas) e isto é onde as coisas começaram a ficar interessante. Esse log mostra-me que o tempo de execução está procurando em todo lugar nesse servidor para minha montagem. Nem parece ser procurá-lo no meu armário de remédios. Mas … Ele não vai procurá-lo no GAC.

Coloquei meu casaco de inverno e ir procurar a Internet novamente e achar que alguém teve este problema também. A longa discussão em que a publicação peters fora em nada e não consigo encontrar uma solução.

Mudar meu assembly para um dos lugares que o log afirma está procurando e eu avançar um pouco mais. Eu sou recompensado com um novo erro no navegador quando tento ativar o recurso:

Falha ao criar objeto receptor de recursos do assembly "xyzzyFeatureReceiver_0", Digite "Conchango.xyzzyFeatureReceiver" para o recurso b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: Sistema. ArgumentNullException: Valor não pode ser nulo.
Nome do parâmetro: tipo
em System.Activator.CreateInstance(Tipo tipo, Boolean confidenciais)
em System.Activator.CreateInstance(Tipo tipo)
em Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Solucionar problemas com o Windows SharePoint Services.

Tempo para uma última viagem à Internets!

Desta vez eu descobrir, previsibilidade suficiente, que MOSS emite este erro porque o assembly não está no GAC.

Quero comprar obter algo positivo fora deste e tentar sentir um pouco orgulhoso que eu criei o Fugitivo de assemblies MSIL, Mas não está funcionando. Estou muito chateado. Me pego resmungando "ovo ou a galinha" sob a minha respiração.

Eu finalmente decidir chutar. Criar um projeto totalmente novo e copiar/colar o código do projeto de não-trabalho de incredible-cloaked-from-the-GAC-assembly sobre a este novo projecto. (Eu procuro um sinalizador de compilação chamado algo como "hide from assembly ligação se instalado no GAC" mas não é possível encontrar um).

Posso instalar o recurso e ativá-lo e … Ele funciona! Assim, Depois de tudo isso, Eu tive que basicamente ' reiniciar’ meu projeto. Esta é outra razão por que eu odeio computadores.

Aprendi uma coisa útil disso. Eu tinha sido instalando recursos usando linha de comando stsadm dia inteiro e usando o "-força" opção por hábito. Por alguma razão, Eu não uso o - opção de força quando eu instalei o novo projeto. Desta vez, Eu fiz realmente, verdadeiramente esquecer copiar assembly deste novo projeto no GAC. Como resultado, Recebi esse "FielNotFoundException" erro. Desta vez, I got it from stsadm, Não, quando eu tentei ativar o recurso através do web browser. Assim, -força, na verdade, interpreta dois papéis. Ele permite que você re-instalar um recurso existente. Ele também permite que você instale uma buggy característica que não pode trabalhar em tempo de execução, suprimindo o erro. Provavelmente diz tanto na ajuda em algum lugar, mas eu nunca notei isso.

</fim>

3 pensamentos "Solução para problema: “FileNotFoundException” Com o meu receptor de recurso.

  1. Francisco

    Também, Eu tinha meu 2 horas de hysteric nintendoSIXTYFOURRRR-em-um-mau-way momentos quando eu renomeado o Namespace do receptor de recurso, para ajudar a rastrear onde seu ou de outra pessoa começou.

    Resposta
  2. Francisco

    A raiz do problema encontra-se em wsp implantado no banco de dados do sharepoint. Eu li o seu post e enquanto ele realmente resolver o problema temos uma enorme solução com vários projetos e dezenas de arquivos então mover tudo não era uma opção.

    Não importa o quanto você atualizar seu GAC ou seu assembly, o que é que lhe dá o problema é que o assembly no atual WSP instalado no sharepoint.

    Você pode facilmente notado que tentando cancelar apenas a solução (que é onde o erro acontece). Tudo acontecendo no "cancelando o tempo" deve ser considerado "implantado wsp"-apenas não o projeto em si.

    Minha solução foi:

    – Administração Central: Cancelar a solução
    – Stsadm: deletesolution
    – Visual Studio => Projeto => Pacote
    – Stsadm: Addsolution-arquivo ProjectbinDebugProject.wsp
    – Stsadm: deploysolution-name project.wsp-imediata - allowgacdeployment-força
    – Visual Studio => Implantar

    Excluído também das pastas bin e depuração do projeto antes de executar novamente o Deploy, pode não ter qualquer efeito, mas vale a pena comentar.

    Isso funciona para ambos

    "Recurso … não pôde ser instalado porque o carregamento de assembly de receptor de eventos"
    and
    "Falha ao criar objeto receptor de recursos do assembly"

    Obrigado!
    Francisco

    Resposta
  3. Tom Clarkson

    Passei algumas horas tentando corrigir esse mesmo problema e encontrou uma solução melhor do que simplesmente recriar o projeto.

    Descobriu-se que por algum motivo que Visual Studio tinha definido o destino de compilação para x86 em vez de 64 ou MSIL – o conjunto foi no GAC, Só não o GAC mesmo que 64 bit SharePoint estava olhando.

    Resposta

Deixe uma resposta para Francisco Cancelar resposta

seu endereço de e-mail não será publicado. Campos obrigatórios são marcados *