Instalei o ELMAH 1.1 .Net 3.5 x64 no meu projeto ASP.NET e agora estou recebendo esse erro (sempre que tento ver qualquer página):
Não foi possível carregar o arquivo ou assembly 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.
Descrição: ocorreu uma exceção não tratada durante a execução da solicitação da web atual. Revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele se originou no código.
Detalhes da exceção: System.BadImageFormatException: Não foi possível carregar o arquivo ou o conjunto 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.
Mais detalhes do erro na parte inferior.
Minha plataforma Active Solution é "Qualquer CPU" e estou executando um Windows 7 x64 em um processador x64, é claro, um processador. A razão pela qual estamos usando esta versão do ELMAH é porque 1.0 .Net 3.5 (x86, que é a única plataforma para a qual é compilada) nos deu o mesmo erro no servidor Windows x64.
Eu tentei compilar para x86 e x64 e recebo o mesmo erro. Eu tentei remover toda a saída do compilador (bin e obj). Finalmente, eu fiz uma referência diretamente à dll SQLite, algo que não era necessário para o projeto funcionar no servidor e eu tenho esse erro do compilador:
Erro 1 Aviso como erro: Geração de assembly - assembly referenciado 'System.Data.SQLite.dll' tem como alvo um processador diferente MyProject
Alguma ideia sobre o que pode ser o problema?
Mais detalhes do erro:
Erro de origem:
Uma exceção não tratada foi gerada durante a execução da solicitação da web atual. Informações sobre a origem e o local da exceção podem ser identificadas usando o rastreamento da pilha de exceções abaixo.
Rastreio de pilha:
[BadImageFormatException: não foi possível carregar o arquivo ou assembly 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.]
System.Reflection.Assembly._nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly .nLoad (AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark & stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark & stackMark, Boolean forIntrospection) Carregar (String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +46[ConfigurationErrorsException: não foi possível carregar o arquivo ou assembly 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper (String assemblyName, Boolean starDirective) +613 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory () +203 System.Web.Configuration .CompilationSection.LoadAssembly (AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies (CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor (VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult (Boolean isPrecompiledApp) +232
System.Web.Compilation.BuildManager.CompileGlobalAsax () +52 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +337[HttpException (0x80004005): não foi possível carregar o arquivo ou assembly 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException () +58 System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled () +512 System.Web.Hosting.HostingEnvironment.Initialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729[HttpException (0x80004005): não foi possível carregar o arquivo ou assembly 'System.Data.SQLite, Versão = 1.0.61.0, Culture = neutral, PublicKeyToken = db937bc2d44ff139' ou uma de suas dependências. Foi feita uma tentativa de carregar um programa com um formato incorreto.]
System.Web.HttpRuntime.FirstRequestInit (contexto HttpContext) +8896783
System.Web.HttpRuntime.EnsureFirstRequestInit (contexto HttpContext) +85
System.Web.HttpRuntime.ProcessRequestInternal ( HttpContext) ) +259
Respostas:
System.Data.SQLite.dll
é um assembly misto, ou seja, contém código gerenciado e código nativo. Portanto, um particularSystem.Data.SQLite.dll
é x86 ou x64, mas nunca os dois.Atualização ( cortesia de J. Pablo Fernandez ): A Cassini, servidor de desenvolvimento da Web usado pelo Visual Studio quando você pressiona F5 ou clica no botão verde «play», é apenas x86, o que significa que, mesmo que sua estação de trabalho seja x64, você será apenas capaz de usar a versão x86 do System.Data.SQLite.dll.
Uma alternativa é não usar o Cassini, mas o IIS7, que é corretamente x64.
fonte
Verifique se "Ativar aplicativos de 32 bits" está definido como falso para o pool de aplicativos.
fonte
Vá para o
IIS7 Application Pool -> advanced settings and set the 32-bit application to true
.fonte
Isso é muito simples se você não estiver usando o SQLite:
Você pode excluir as DLLs do SQLite das pastas bin da solução e depois da pasta em que você faz referência ao ELMAH. Reconstrua, e seu aplicativo não tentará carregar esta DLL que você não está usando.
fonte
Eu tenho uma máquina dev de 64 bits e um servidor de compilação de 32 bits. Eu usei esse código antes da inicialização do NHibernate. Funciona um charme em qualquer arquitetura (bem os 2 que eu testei)
Espero que isso ajude alguém.
Guido
fonte
No nosso caso, não funcionou porque nosso servidor de produção está ausente
Pacote redistribuível do Microsoft Visual C ++ 2010 SP1 (x86)
Instalamos e tudo funciona bem. O pool de aplicativos deve ter Ativar aplicativos de 32 bits definido como true e você deve ter a versão x86 da biblioteca
fonte
Como alguém que teve que lidar com alguns relatórios de erros no Roadkill Wiki com exatamente o mesmo problema, é isso que você precisa fazer:
System.Data.SQLite.dll
System.Data.SQLite.Linq.dll
É realmente uma dor de cabeça quantos buracos você precisa percorrer ao redistribuir os binários SQLite .NET, minha solução para o Roadkill no final foi copiar os binários corretos para a pasta ~ / bin com base na arquitetura que você está usando . Infelizmente, isso não resolve o problema de tempo de execução do C ++.
fonte
Eu resolvi isso instalando System.Data.SQLite com extensão Nuget. Esta extensão pode ser usada para o Visual Studio 2010 ou superior. Primeiro, você precisa instalar a extensão Nuget. Você pode acompanhar aqui:
Segundo, agora você pode instalar o SQLite:
E agora, você pode usar System.Data.SQLite.
No caso, você vê duas pastas x64 e x86, essas pastas contêm SQLite.Interop.dll. Agora vá para as janelas de propriedades dessas DLLs e defina a ação de compilação como conteúdo e o diretório Copiar para saída é Copiar sempre.
Então, esse é o meu caminho.
Obrigado. Kim Tho Pham, Cidade de HoChiMinh, Vietnã. E-mail: [email protected]
fonte
O assembly System.Data.SQLite relacionado à carga manual pode resolver isso.
O código da gatapia foi alterado conforme abaixo:
fonte
Eu recebi esse erro quando nosso servidor Windows foi convertido do SO de 32 bits para 64 bits. A montagem que estava lançando o erro foi configurada para compilar no modo x86 (ou seja, modo 32). Eu mudei para "Qualquer CPU" e isso fez o truque. Você pode alterar esse valor fazendo o seguinte:
clique direito no projeto vá para
Properties -> Build -> Platform Target -> change to "Any CPU"
fonte
Resolvi isso, curiosamente, instalando o System.Data.SQLite por meio do aplicativo Nuget GUI, em oposição ao console do gerenciador de pacotes.
A instalação via console não incluiu as dependências que esta biblioteca precisa executar.
fonte
System.Data.SQLite
depende deSystem.Data.SQLite.interop
garantir que ambos os pacotes sejam da mesma versão e sejam ambos x86 .Esta é uma pergunta antiga, mas tentei todas as opções acima. Eu estava trabalhando em um projeto estritamente x86 , então não havia duas pastas / x86, / x64. Mas, por alguma razão, a
System.Data.SQLite
versão era diferenteSystem.Data.SQLite.interop
, uma vez que eu puxei as DLLs correspondentes, o problema foi corrigido.fonte
Eu vim com 2 soluções rápidas. Ou funciona para mim. Eu acho que o problema é por causa das permissões.
1) Em vez de usar o arquivo Elmah.dll do diretório net-2.0, usei o Elmah.dll do net-1.1.
2) Em vez de manter o Elmah.dll no diretório bin do projeto. Eu faço um diretório DLL para colocá-lo.
fonte
Outra maneira de contornar isso é apenas atualizar seu aplicativo para o ELMAH 1.2, em vez de 1.1.
fonte
Você pode excluir sua pasta bin debug e recompilar novamente?
Ou verifique a referência do seu projeto para
System.Data.SQLite
, localize onde está localizado e abra a dll no refletor. Se você não conseguir abri-lo, isso significa que a dll está corrompida, convém encontrar uma correta ou reinstalar a estrutura .net.fonte
Se você estiver usando o IIS Express como servidor da Web em sua máquina de desenvolvimento, eu mudaria para Local IIS. Isso funcionou para mim.
fonte
Esta é uma postagem antiga, mas pode ajudar algumas pessoas que pesquisam esse erro a tentar definir "Ativar aplicativos de 32 bits" como True para o pool de aplicativos. Foi isso que resolveu o erro para mim. Encontrei esta solução lendo alguns comentários da resposta de @ beckelmw.
fonte
Você provavelmente tem o pacote errado instalado. Você deseja o pacote produzido pela Microsoft que implementa o modelo de provedor System.Data.Common.
fonte