c# - strong - o módulo deveria conter um manifesto de assembly



Por que estou recebendo 'Assembly'*.dll 'deve ser forte assinado para ser marcado como um pré-requisito.' (18)

Eu estou tentando compilar meu suplemento do Excel usando C # 4.0 e comecei a obter esse problema ao criar meu projeto no Visual Studio. É importante dizer que eu não tive esse problema antes. O que poderia causar isso acontecer?

https://ffff65535.com


Adicionando minha solução para esse problema para qualquer pessoa, isso pode ajudar.

Eu tive uma solução ClickOnce jogando este erro. O aplicativo referenciava uma pasta "Libs" comum e continha uma referência de projeto para um Foo.dll . Enquanto nenhum dos projetos na solução fez referência a cópia estática do Foo.dll na pasta "Libs", algumas das referências nessa pasta fez (ou seja: minha solução tinha refs para Libs\Bar.dll que referenciada Foo.dll .) Como o aplicativo CO tirou todas as dependências do Libs e suas dependências, ambas as cópias estavam entrando no projeto. Isso estava gerando o erro acima.

Eu Libs\Foo.dll o problema movendo minha versão estática Libs\Foo.dll para uma subpasta, Libs\Fix\Foo.dll . Essa alteração fez o aplicativo ClickOnce usar somente a versão do projeto da DLL e o erro desapareceu.


Agora, aqui está uma abordagem diferente para o problema:

  • Clique com o botão direito do mouse no projeto e selecione a opção 'Descarregar projeto'. Você notará que seu projeto se torna indisponível.

  • Clique com o botão direito no projeto indisponível e selecione a opção "Editar".

  • Role para baixo até a tag "<ItemGroup>" que contém todas as tags de recursos.

  • Agora vá para a referência que foi exibida na lista de erros, você notará que ela usa uma única tag (ou seja, < Reference Include="assemble_name_here, Version=0.0.0.0, Culture=neutral" / > ).

  • Altere isso para parecer da seguinte maneira:

.

<Reference Include="assemble_name_here, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" >
    < Private > True < / Private >
    < HintPath > path_here\assemble_name_here.dll < / HintPath >
< / Reference >
  • Salve suas alterações, clique com o botão direito do mouse no projeto indisponível novamente e clique na opção 'Recarregar Projeto' e, em seguida, compile.

Descarregar e recarregar o projeto problemático resolveu isso para mim.


Eu encontrei esse problema depois de migrar um suplemento do Excel de packages.config para PackageReference. Parece estar relacionado a este problema .

O seguinte funciona como uma solução alternativa bruta se você não estiver usando o ClickOnce (ele omitirá todas as informações de dependência do arquivo .manifest ):

  1. Descarregue o projeto, edite .csproj
  2. Encontre a seção parecida com esta:

    <!-- Include additional build rules for an Office application add-in. -->
    <Import Project="$(VSToolsPath)\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets" Condition="'$(VSToolsPath)' != ''" />
  3. Edite uma cópia renomeada do arquivo .targets referenciado (no meu caso, o arquivo foi resolvido para C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets e eu fiz uma cópia Microsoft.VisualStudio.Tools.Office_FIX.targets na mesma pasta - não verifiquei se funciona de uma pasta diferente).

  4. Encontre o elemento GenerateApplicationManifest e altere seu atributo Dependencies="@(DependenciesForGam)" para Dependencies="" .

  5. Altere a seção encontrada em 2. para fazer referência ao seu arquivo .targets editado.

Isso terá que ser repetido sempre que a versão do arquivo .targets fornecida com o VS for atualizada (ou você não obterá as atualizações), mas espero que seja corrigida em breve ...


Eu também topar com o tipo de problema, tudo que eu tinha que fazer é excluir o .dll (pode ser encontrado em referência) que causando o erro e adicioná-lo novamente .

Funciona como um encanto.


Eu tenho o erro de compilador semelhante. Depois de adicionar o projeto dependente do arquivo dll à solução, resolva o problema.


Eu tive isso em uma solução com 6 projetos. Um dos meus projetos estava se referindo ao assembly nomeado como referência de arquivo. Os outros estavam todos apontando para a referência do projeto.

Eu geralmente recebo um erro diferente nesses casos.

Minha solução foi excluir o assembly nomeado em qualquer lugar em que ele foi referenciado e incluí-lo novamente. Depois que trabalhei no projeto, esse problema desapareceu. Antes de fazer isso, tentei limpar a solução, além de garantir que nenhum dos projetos fosse assinado.

espero que ajude alguém ...


Excluir a DLL (onde o erro ocorreu) e reconstruir a solução corrigiu meu problema. obrigado


Havia muitos projetos em minha solução para serem atualizados individualmente e corrigi-os:

  • Clique com o botão direito na minha solução e selecione 'Gerenciar pacotes NuGet para solução ...'
  • Indo para a guia Atualizações
  • Encontrar o pacote afetado e selecionar Atualizar
  • Clicou em OK e isso trouxe todas as instâncias do pacote atualizadas

Isso é causado quando você altera a versão do .dll que é referenciado. Você precisa excluir todos os itens ou o .dll na pasta de criação de destino.


O que me ajudou foi que entrei no Package Manager Solution e examinei o pacote instalado que estava causando o problema. Vi que vários projetos estavam referenciando o mesmo pacote, mas versões diferentes. Eu os alinhei com base nas minhas necessidades e funcionou.


Quando isso aconteceu comigo com o WindowsAPICodePack depois de atualizá-lo, acabei de reconstruir a solução.

Construir -> Reconstruir Solução


Se for uma incompatibilidade de dependências de dependências, vá para o gerenciador de pacotes NuGet no nível da solução e verifique as guias Atualizar e Consolidar, harmonize tudo.


Se o seu projeto principal usando alguns projetos de biblioteca e tem referência a eles, você pode causar esse problema se o seu projeto fizer referência a um arquivo dll de montagem em vez de um projeto de biblioteca quando você altera algo em seu projeto de biblioteca (ex: renomeie uma classe).

Você pode verificar todas as referências ao seu projeto principal por visualização na janela Pesquisador de objetos (menu Exibir-> Navegador de objetos). Uma referência a um arquivo dll sempre tem um número de versão. Ex: TestLib [1.0.0.0]

Solução: exclua a referência atual do seu projeto principal para o projeto da biblioteca e inclua novamente a referência a esse projeto de biblioteca.


Se você tentou todas as outras respostas nesta pergunta e você:

  • Tenha vários projetos em sua solução
  • Ter um projeto (Projeto A) que faça referência a outro projeto (Projeto B), cujo projeto faz referência a um pacote NuGet.
  • No Project A, você usou o Intellisense / ReSharper para trazer a referência ao pacote NuGet referenciado no Projeto B (isso pode acontecer quando um método no Projeto B retorna um tipo fornecido pelo pacote NuGet e esse método é usado no Projeto A)
  • atualizou o pacote NuGet por meio do NuGet Package Manager (ou CLI).

... você pode ter versões separadas da DLL de pacotes do NuGet nas referências de seus projetos, pois a referência criada pelo Intellisense / ReSharper será uma referência "normal" e não uma referência do NuGet conforme o esperado, portanto, o processo de atualização do NuGet foi ' t encontrar ou atualizá-lo!

Para corrigir isso, remova a referência no Projeto A, use o NuGet para instalá-lo e verifique se os pacotes NuGet em todos os projetos são da mesma versão. (como explicado nesta resposta )

Dica do Life Pro:

Este problema pode surgir sempre que o ReSharper / Intellisense sugerir adicionar uma referência ao seu projeto. Pode ser muito mais profundamente complicado do que o exemplo acima, com vários projetos de entrelaçamento e dependências dificultando o rastreamento. Se a referência sugerida pelo ReSharper / Intellisense for realmente de um pacote NuGet, use o NuGet para instalá-lo.


Sua montagem está devidamente assinada?

Para verificar isso, pressione Alt + Enter no seu projeto (ou clique com o botão direito do mouse em Propriedades). Vá para "Assinatura". Verifique se a caixa de seleção "Assinar a montagem" está marcada e se o arquivo de chave de nome forte está selecionado e "Somente sinal de atraso" está desmarcado .


Vá para a página de propriedades do projeto. Em seguida, vá para "Publicar" e, em seguida, "Arquivos de aplicativos". As dlls mencionadas no erro serão marcadas como pré-requisito. Altere-os para "Incluir"


Veja esta answer .

Vá para a página de publicação e clique em "Arquivos de aplicativos". De lá você deve ver uma lista de suas DLL's. Certifique-se de que aqueles que estão causando problemas tenham o status de publicação marcado como "Incluir" em vez de "Pré-requisito".





.net-4.0