Recebo o erro "Foi feita uma tentativa de carregar um programa com um formato incorreto" em um projeto de replicação do SQL Server


318

O erro exato é o seguinte

Não foi possível carregar o arquivo ou assembly 'Microsoft.SqlServer.Replication, versão = 9.0.242.0, Culture = neutral, PublicKeyToken = 89845dcd8080cccc91' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.

Recentemente, comecei a trabalhar nesse projeto novamente após dois meses de mudança para outro projeto. Funcionou perfeitamente antes, e verifiquei todas as referências.

Respostas:


405

A resposta de baldy abaixo está correta, mas também pode ser necessário ativar aplicativos de 32 bits no seu AppPool.

Fonte: http://www.alexjamesbrown.com/uncategorized/could-not-load-file-or-assembly-chilkatdotnet2-or-one-of-its-dependencies-an-attempt-was-made-to-load- um programa com um formato incorreto /

Ao configurar um aplicativo para ser executado na minha máquina local (executando o Vista 64bit), encontrei este erro:

Não foi possível carregar o arquivo ou o assembly ChilkatDotNet2ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.

Obviamente, o aplicativo usa componentes ChilKat , mas parece que a versão que estamos usando é apenas a versão de 32 bits.

Para resolver esse erro, defino meu pool de aplicativos no IIS para permitir aplicativos de 32 bits. Abra o Gerenciador do IIS, clique com o botão direito do mouse no pool de aplicativos e selecione Configurações avançadas (veja abaixo)

insira a descrição da imagem aqui

Em seguida, defina "Ativar aplicativos de 32 bits" como True.

insira a descrição da imagem aqui

Tudo feito!


Isso faria com que todo o pool de aplicativos fosse executado em 32 bits e não em 64 bits? A recompilação da dependência para plataformas de 64 bits / todas seria uma solução melhor? Estou tendo esse problema devido ao NFOP, mas como é de código aberto, eu poderia compilá-lo novamente.
— precisa saber é o seguinte

2
O link não funciona, mas sua explicação foi suficiente para resolver o meu problema. +1
— Andrew Shepherd

Link com instruções sobre como habilitar aplicativos de 32 bits: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
— Brandon S

15
Vale a pena notar que esta solução do AppPool se aplica apenas a aplicativos ASP.NET - pode confundir alguns desenvolvedores que nunca usaram / configuraram o ASP.NET ou IIS.
— galaktor

não corrigi-lo no IIS7 apenas em IIS7.5
— FlavorScape

120

Eu encontrei a solução. Atualizei recentemente minha máquina para o Windows 2008 Server de 64 bits. O espaço para nome SqlServer.Replication foi gravado para plataformas de 32 bits. Tudo o que eu precisava para fazê-lo funcionar novamente era definir a Plataforma de Destino nas Propriedades de Construção do Projeto como X86.


Estou tendo esse problema com uma DLL, mas meu projeto> Propriedades do HDP ... não possui uma guia "Build" (aparentemente tudo, mas não isso). As guias Compilar e Depurar têm um menu suspenso "Plataforma", mas o único item no menu suspenso nos dois casos é "Ativo (qualquer CPU)".
— B. Clay Shannon

Por acaso, encontrei o reverso do problema acima. Eu tinha tudo rodando em 64 bits e meu alvo de compilação era Qualquer CPU. Quando eu mudei isso para 64 bits funcionou perfeitamente bem :)
— Madhurya Gandi

87

Altere o valor para o destino da plataforma na página de propriedades do seu projeto da web para Any CPU.

insira a descrição da imagem aqui


Infelizmente não tem efeito.
— Jonathan

4
Eu estava errado - isso funcionou, depois que me livrei de todas as minhas pastas 'bin'. Obrigado!
— 61111 Jonathan

Também corrigi meu problema, mas somente depois de fazer isso para TODOS os projetos na minha solução. As etapas mencionadas são para projetos em C #. Para projetos VB.NET, mudança Projeto Propriedades> Compilar> Advanced Compile Options> alvo CPU para "AnyCPU"
— Francois Botha

6
No meu caso, o projeto já estava direcionado para "Qualquer CPU". Mas estou executando o Windows de 64 bits e estava tentando importar um driver de hardware da velha escola. Alterar especificamente o destino para x86 o corrigiu para mim.
— bsegraves

No meu caso, eu queria rodar em x64. Não estava funcionando. Depois de alterar todas as recomendações, eu também tive que alterar a 'Bitness' na Web também para x64
— SKCS Kamal

52

Vá para IIS -> Pool de aplicativos -> Configurações avançadas -> Habilitar aplicativos de 32 bits


Clay, qual versão do IIS você está usando?
— Harpal 27/11

23

Recentemente, tivemos o problema ao tentar executar o código no Visual Studio. Nesse caso, você precisa
executar FERRAMENTAS> OPÇÕES> Projetos e soluções> PROJETOS NA WEB e verificar "Usar a versão de 64 bits do IIS Express para sites e projetos".


1
Isto é o que finalmente funcionou para mim. Especialmente para as pessoas que tentam depurar a API da Web com as bibliotecas do Service Fabric !!! Se você estiver usando alguma DLL do Service Fabric em seu projeto, verifique se está usando a solução acima.
— 31416 Chris

Esta é a única solução que funcionou para mim. Obrigado. : D
— Jeremy Styers

Trabalhe para mim também!
— Cù Đức Hiếu

11

Para aqueles que recebem esse erro em um projeto do ASP.NET MVC 3 , no próprio Visual Studio:

Em um aplicativo ASP.NET MVC 3 em que estou trabalhando, tentei adicionar uma referência ao Microsoft.SqlServer.BatchParser a um projeto para resolver um problema em que estava ausente em um servidor de implantação. (Nosso aplicativo usa SMO; a correção correta foi instalar o SQL Server Native Client e algumas outras coisas no servidor de implantação.)

Mesmo depois de remover a referência ao BatchParser, continuei recebendo o erro "Foi feita uma tentativa ...", referenciando a DLL do BatchParser, em todas as páginas do ASP.NET MVC 3 que abri e esse erro foi seguido por dezenas de análises de páginas erros.

Se isso acontecer com você, pesquise e verifique se a DLL ainda está em uma das pastas \ bin do seu projeto. Mesmo se você fizer uma reconstrução, o Visual Studio não limpará necessariamente tudo em todas as suas pastas \ bin. Quando apaguei a DLL da lixeira e criei novamente, o erro desapareceu.


Acabei de fazer uma reconstrução e o problema foi resolvido sem a exclusão manual da DLL. Obrigado!
— Trevor

4

Eu tive isso em um aplicativo MVC5 no Windows 10 contra o IIS Express. Minha solução foi a seguinte:

  • Ferramentas =>
    • Opções =>
      • Projetos e Soluções =>
        • Projetos da Web =>
          • Use a versão de 64 bits do IIS Express para sites e projetos

3

altere para 32 bits (true) funciona

se você obtiver esse comprimento, não poderá ser menor que zero. Nome do parâmetro: problema de comprimento na configuração do servidor iis, faça a coisa simples alterar a cadeia de conexão no arquivo web.config, como o nome do servidor sql e o nome do servidor, reinicie o iis e tente carregar a página em que ele funciona


2

Se publicar no Visual Studio 2012 ao criar um erro, tente desmarcar a opção "Procompilar durante a publicação" no assistente de publicação.

Desmarque a opção "Pré-compilar durante a publicação"


0

no aplicativo de formulário do Windows, clique com o botão direito do mouse em Projeto-> Propriedades-> Construção-> Marque a caixa de seleção Preferir 32 bits. Obrigado a todos


0
  1. Exclua o diretório de teste temporário localizado aqui C: \ Usuários (Usuário) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Defina todos os projetos para x64 no Visual Studio

  3. Defina a arquitetura do processador padrão como x64 (Test / TestSettings / Default Processor Architecture).

Certifique-se de limpar compilar o arquivo de solução. Espero que isso ajude!


0

Alterar o Target Framework nas propriedades do projeto do .NET Framework 4.7.1 para 4.6.2 funcionou para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.