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.