Eu tenho dois projetos ProjectA
e ProjectB
. ProjectB
é um aplicativo de console, do qual depende ProjectA
. Ontem, tudo estava funcionando bem, mas de repente hoje, quando corro ProjectB
, recebo o seguinte:
BadImageFormatException não foi tratado : não foi
possível carregar o arquivo ou assembly 'ProjectA, Versão = 1.0.0.0, Culture = neutral, PublicKeyToken = null' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.
Ambos são apenas projetos regulares, sem dependências de outros projetos que não sejam da Net. Ambos são totalmente .Net - não há código nativo nem P / Invoke. Tenho outros projetos que dependem ProjectA
e ainda funcionam muito bem.
Coisas que tentei:
- Verifique se os dois projetos estão definidos como "Qualquer CPU", com a caixa de seleção compilar marcada. Eles são.
- Verifique se os dois projetos são para o mesmo Target Framework (.Net 4.0 Client Profile) .
- Em ProjetoB -> Referências -> ProjetoA -> Propriedades, verifique se "Copiar local" está definido como "Verdadeiro" _ (verifiquei que o ProjectA.dll está sendo copiado corretamente)
- Limpe / reconstrua a solução. Até tentei excluir manualmente as pastas / bin e / obj nos dois projetos.
- Reinicie o Visual Studio. Reinicie meu computador.
- Confira uma cópia totalmente nova do repositório.
Mas ainda recebo o mesmo erro. Não tenho ideia do que fiz para causar isso, nem como consertá-lo. Alguma ideia?
fonte
Respostas:
Tenho certeza de que você está tendo um conflito de 32 ou 64 bits. Parece que seu projeto principal pode estar definido como 32 bits, enquanto a classe de referência está definida como 64 bits. Tente olhar para esta questão SO e esta também . Entre os dois, você poderá descobrir seu problema.
fonte
project-->properties-->build
- foi definida para x86; defini-lo como "Qualquer CPU" corrigiu esse problema. Eu sempre pensei que essa configuração era a mesma do menu suspenso "destino da plataforma" no gerenciador de configuração, mas aparentemente não é (na verdade, o "destino da plataforma" no gerenciador de configuração parece não fazer nada!)<PlatformTarget>x86</PlatformTarget>
um dos projetos dependentes sem nenhum motivo. Se eu não tivesse pesquisado o SVN, nunca descobriria por que nosso aplicativo MVC falha ao iniciar.Pode ser que você esteja enfrentando o problema com seu site após a implantação no servidor.
Então você precisa ajustar o pool de aplicativos para Ativar aplicativos de 32 bits .
Passos
No painel direito, clique em Configurações avançadas ...
Defina Ativar aplicativos de 32 bits como True
fonte
Acabei de receber esta mensagem de erro executando o IIS Express no Visual Studio 2015. No meu caso, eu precisava estar executando a versão de 64 bits do IIS Express:
Captura de tela:
fonte
Eu tenho esse mesmo problema. Eu havia definido o "Destino da plataforma" do Projeto A ("Projeto A" (clique com o botão direito) -> Propriedades-> Construção -> "Destino da plataforma") para x86, mas mantive o Projeto B em "Qualquer CPU". Definir o projeto B como "x86" corrigiu isso.
fonte
Eu tive esse problema ao executar testes de unidade (xunit) no Visual Studio 2015 e me deparei com a seguinte correção:
fonte
Pode ser necessário alterar a configuração do pool de aplicativos "Ativar aplicativos de 32 bits" para TRUE no IIS7 se você tiver pelo menos 1 dll de 32 bits \ exe em seu projeto.
fonte
Primeiro, obtive isso no VS2017 com um projeto antigo que precisava fazer uma pequena alteração e aprimorei todos os projetos para a estrutura 4.7.
Vários outros mencionaram que a seleção
Any CPU
pode corrigir esse problema.Há alguns lugares que você precisa fazer e pode não ser tão simples quanto selecionar na lista suspensa. Isso corrigiu para mim:
1) Você precisa fazer as duas coisas aqui:
2) E também em
Configuration Manager
(clique direito na solução)Mas e se não estiver lá ???
Em seguida, clique
New
e escolha estas configurações: ( obrigado @RckLN )fonte
Eu tive o mesmo problema com vários projetos na mesma solução, acabei definindo todas as estruturas de destino para .NET Framework 4 e x86 para a CPU de destino e ela finalmente foi compilada com êxito.
fonte
Você também pode ver esse problema se estiver tentando empacotar um projeto de 64 bits com um instalador MSI no VS. ("O motivo é que o shim nativo empacotado com o arquivo .msi é um executável de 32 bits.")
Consulte aqui para obter mais detalhes: http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx
fonte
Nenhuma dessas soluções funcionou para mim - mas, ao excluir o conteúdo das pastas bin e obj, tudo ficou legal novamente.
fonte
Consegui isso ao criar um projeto via Build do Visual Studio Online (VSTS) usando as
Visual Studio Build
Etapas.A solução foi:
fonte
A seguir, resolvi o problema para mim, desmarque 'Preferir 32 bits':
fonte
Eu encontrei o mesmo problema. Surgiu do nada e isso me pareceu estranho.
No instantâneo Exception, para o FusionLog, vi o seguinte em sua mensagem:
... C: \ Windows \ Microsoft.NET \ Framework64 ...
Mais sobre o log de fusão: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
Todos os projetos tinham uma CPU alvo de AnyCPU. Alterei o projeto do aplicativo (o projeto que referencia todos os outros projetos) para uma CPU de destino de x86. Agora funciona.
Não tenho certeza de como a mistura da CPU de destino ocorreu sem motivo aparente, mas ocorreu.
fonte
Também enfrento esse problema em um projeto. Após alguns minutos, encontrei a solução. Esse problema ocorre devido à configuração da CPU. Se você estiver usando o Visual Studio 2010 ou VS 2013 , basta ir às propriedades do projeto e selecionar Compilar na barra lateral. e haverá 5 menus suspensos; o 5º menu suspenso será a CPU de destino: você deve configurá-lo para x86 ou x64 de acordo com seus requisitos, em vez de Qualquer CPU.
Meu problema foi resolvido depois de alterá-lo para x86.
fonte
Isso também pode acontecer apenas com a definição de várias estruturas suportadas no arquivo app.config e forçando a execução do aplicativo em uma estrutura .NET diferente da que foi mencionada primeiro no arquivo app.config .
E isso também é acionado quando você tem as duas estruturas mencionadas disponíveis no seu sistema.
Como solução alternativa, abra a estrutura de destino que você usará para a depuração no app.config
ex: se você estiver tentando executar no .NET 4, o arquivo de configuração deve ter algo semelhante a isso,
fonte
No meu projeto para C #, propriedade do projeto -> [Build] -> Platform target: Qualquer CPU e desmarque a opção Prefer 32-bit para permitir que o compilador escolha automaticamente.
fonte
O assembly Chilkat .NET 4.5 requer que o tempo de execução VC ++ 2012 ou 2013 seja instalado em qualquer computador em que seu aplicativo seja executado. A maioria dos computadores já o tem instalado. Seu computador de desenvolvimento o terá porque o Visual Studio foi instalado. No entanto, se estiver implantando em um computador em que o tempo de execução VC ++ necessário não esteja disponível, o erro acima ocorrerá:
Instale todos os pacotes abaixo
Pacotes redistribuíveis do Visual C ++ para Visual Studio 2013 - vcredist_x64
Pacotes redistribuíveis do Visual C ++ para Visual Studio 2013 - vcredist_x86
Pacotes redistribuíveis do Visual C ++ para Visual Studio 2012 - vcredist_x64
Pacotes redistribuíveis do Visual C ++ para Visual Studio 2012 - vcredist_x86
fonte
Se você usa o LibreOffice do seu programa via integração cli .net como eu, recebi o mesmo erro. Uso a versão mais antiga do LibreOffice no ambiente de produção do meu PC. Instalei uma versão mais recente que estava em conflito. Basta desinstalar o LibreOffice. Encontrei a solução aqui . CLI do .NET: Não foi possível carregar o arquivo ou assembly 'cli_cppuhelper'
fonte
Pode ser um pouco engraçado, mas tive o mesmo problema com o código de trabalho normal. Eu adicionei StreamWriter e StreamReader e deu esse erro. A solução foi colocar esse código entre parênteses nos comentários e depurar e ele começou a funcionar novamente
fonte
Também tive esse problema ao executar testes de unidade usando o ReSharper no Visual Studio 2017 e o corrigi com a seguinte configuração:
Também é possível alterar a configuração do teste de execução do ReSharper: https://resharper-support.jetbrains.com/hc/en-us/articles/207242715-How-to-run-MSTest-tests-using-x64-configuration
fonte
No meu caso, faltava uma dependência na DLL que lançou essa exceção. Eu verifiquei com o Dependency Walker, adicionei a dll ausente e o problema foi resolvido.
Mais especificamente, de alguma forma corrompi meu opencv_core340.dll adicionando acidentalmente palavras-chave SVN a ele e, portanto, minha dll não pode mais usá-lo. No entanto, não acredito que a solução para esse problema dependa se a DLL está corrompida ou ausente. Estou apenas adicionando isso para fornecer informações completas.
fonte
Tiro! Eu sabia sobre esse problema. Eu pensei que estava fazendo tudo certo até que acidentalmente vi 'x86' na janela de saída do VS e foi aí que eu descobri a causa. Desperdiçou alguns minutos hoje.
A configuração na janela 'Publicar' foi definida como 'x86'; enquanto que, em qualquer outro lugar, era 'x64'.
Verifique se está sincronizado no gerenciador de configuração, publique configurações, configurações da solução e configurações do IIS (se esse for o seu servidor da web).
Além disso, lembre-se: o VS é um aplicativo de 32 bits e o IIS é de 64 bits. Aplicativos de 32 bits estão desabilitados por padrão no IIS.
fonte
Eu detectei algo diferente das outras respostas. Atingir essa exceção no meu projeto foi o resultado de uma compilação corrompida. Sem fazer nenhuma alteração, apenas forçando a reconstrução , foi corrigido.
fonte
Eu tive o mesmo problema. O Projeto B, no meu caso, era uma .Net Core Class Library que possui um Nuget "Microsoft.Management.Infrastructure" instalado. O erro foi que eu chamei meu projeto B de "MI". Mudei o nome do projeto para outra coisa e de repente tudo funcionou novamente.
fonte
Minha máquina me mostrou uma atualização do BIOS e me perguntei se isso tinha alguma coisa a ver com o surgimento repentino desse erro. E depois que fiz a atualização, o erro foi resolvido e a solução foi criada com perfeição.
fonte
Você está tentando executar o arquivo .exe no cmd? Este foi o meu erro. Basta executar o arquivo .exe clicando duas vezes nele. Se for um .NET Core SCD para Windows 8.1 / Windows Server 2012 R2 x64.
fonte