Viene visualizzato l'errore "È stato effettuato un tentativo di caricare un programma con un formato errato" in un progetto di replica di SQL Server


318

L'errore esatto è il seguente

Impossibile caricare il file o l'assembly "Microsoft.SqlServer.Replication, Version = 9.0.242.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91" o una delle sue dipendenze. Tentativo di caricare un programma con un formato errato.

Di recente ho iniziato a lavorare su questo progetto dopo due mesi di trasferimento a un altro progetto. Ha funzionato perfettamente prima e ho ricontrollato tutti i riferimenti.

Risposte:


405

La risposta di baldy di seguito è corretta, ma potresti anche dover abilitare le applicazioni a 32 bit nel tuo 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- un programma-con-una-corretta-formato /

Durante la configurazione di un'applicazione per l'esecuzione sul mio computer locale (con Vista 64 bit) ho riscontrato questo errore:

Impossibile caricare il file o l'assembly ChilkatDotNet2o una delle sue dipendenze. Tentativo di caricare un programma con un formato errato.

Ovviamente, l'applicazione utilizza componenti ChilKat , ma sembrerebbe che la versione che stiamo usando sia solo la versione a 32 bit.

Per risolvere questo errore, ho impostato il mio pool di app in IIS per consentire le applicazioni a 32 bit. Apri Gestione IIS, fai clic con il pulsante destro del mouse sul pool di app e seleziona Impostazioni avanzate (vedi sotto)

inserisci qui la descrizione dell'immagine

Quindi impostare "Abilita applicazioni a 32 bit" su True.

inserisci qui la descrizione dell'immagine

Tutto fatto!


Ciò provocherebbe l'esecuzione dell'intero pool di applicazioni a 32 bit e non a 64 bit completo? Ricompilare la dipendenza per 64 bit / tutte le piattaforme sarebbe una soluzione migliore? Sto riscontrando questo problema a causa di NFOP, ma dal momento che è open source, ho potuto ricompilarlo.
Jamiebarrow,

2
Il collegamento non funziona, ma la tua spiegazione è stata sufficiente per risolvere il mio problema. +1
Andrew Shepherd,

Link con le istruzioni su come abilitare le applicazioni a 32 bit: blogs.msdn.com/b/rakkimk/archive/2007/11/03/…
Brandon S

15
Vale la pena notare che questa soluzione AppPool si applica solo alle applicazioni ASP.NET - potrebbe confondere alcuni sviluppatori che non hanno mai usato / configurato ASP.NET o IIS.
galaktor,

non lo risolve in IIS7 solo in IIS7.5
FlavorScape

120

Ho trovato la soluzione Di recente ho aggiornato la mia macchina a Windows 2008 Server a 64 bit. Lo spazio dei nomi SqlServer.Replication è stato scritto per piattaforme a 32 bit. Tutto quello che dovevo fare per farlo funzionare di nuovo era impostare la piattaforma di destinazione nelle proprietà di costruzione del progetto su X86.


Sto riscontrando questo problema con una DLL, ma il mio Progetto> Proprietà HDP ... non ha una scheda "Build" (apparentemente tutto ma, ma non quello). Entrambe le schede Compile e Debug hanno un menu a discesa "Piattaforma", ma in entrambi i casi l'unico elemento nel menu a discesa è "Attivo (qualsiasi CPU)".
B. Clay Shannon,

Mi è capitato di incontrare il contrario del problema sopra. Avevo tutto in esecuzione a 64 bit e il mio obiettivo di build era Qualsiasi CPU. Quando l'ho cambiato a 64 bit ha funzionato perfettamente :)
Madhurya Gandi l'

87

Modificare il valore per Target piattaforma nella pagina delle proprietà del progetto Web in Any CPU.

inserisci qui la descrizione dell'immagine


Purtroppo non ha alcun effetto.
Jonathan,

4
Ho sbagliato - ha funzionato, dopo che mi sono liberato di tutte le mie cartelle "bin". Grazie!
Jonathan,

Risolto anche il mio problema, ma solo dopo averlo fatto per OGNI progetto nella mia soluzione. I passaggi indicati sono per i progetti C #. Per i progetti VB.NET, modifica Proprietà progetto> Compila> Opzioni di compilazione avanzate> Destinazione CPU su "AnyCPU"
Francois Botha,

6
Nel mio caso, il progetto era già destinato a "Qualsiasi CPU". Ma sto eseguendo Windows a 64 bit e stavo cercando di importare un driver hardware di vecchia scuola. Specificamente cambiando il target in x86 lo ha risolto per me.
sabato

Nel mio caso, volevo correre sotto x64. Non funzionava Dopo aver cambiato tutte le raccomandazioni, ho anche dovuto cambiare il 'Bitness' sotto il Web anche in x64
SKCS Kamal

52

Vai a IIS -> Pool di applicazioni -> Impostazioni avanzate -> Abilita applicazioni a 32 bit


Clay, quale versione di IIS stai usando?
Harpal,

23

Di recente abbiamo riscontrato il problema durante il tentativo di eseguire il codice da Visual Studio. In tal caso è necessario eseguire
STRUMENTI> OPZIONI> Progetti e soluzioni> PROGETTI WEB e selezionare "Usa la versione a 64 bit di IIS Express per siti Web e progetti".


1
Questo è ciò che alla fine ha funzionato per me. Soprattutto per chi cerca di eseguire il debug dell'API Web con le librerie di Service Fabric !!! Se si utilizzano DLL di Service Fabric nel progetto, assicurarsi di utilizzare la soluzione sopra.
Chris Dutra,

Questa è l'unica soluzione che ha funzionato per me. Grazie. : D
Jeremy Styers

Lavora anche per me!
Cù ếc Hiếu

11

Per coloro che ottengono questo errore in un progetto ASP.NET MVC 3 , all'interno di Visual Studio stesso:

In un'app ASP.NET MVC 3 su cui sto lavorando, ho provato ad aggiungere un riferimento a Microsoft.SqlServer.BatchParser a un progetto per risolvere un problema in cui mancava su un server di distribuzione. (La nostra app utilizza SMO; la soluzione corretta era installare SQL Server Native Client e un paio di altre cose sul server di distribuzione.)

Anche dopo aver rimosso il riferimento a BatchParser, ho continuato a ricevere l'errore "È stato effettuato un tentativo ...", facendo riferimento alla DLL BatchParser, su ogni pagina ASP.NET MVC 3 che ho aperto e quell'errore è stato seguito da dozzine di analisi della pagina errori.

Se questo accade a te, fai una ricerca di file e vedi se la DLL è ancora in una delle cartelle \ bin del tuo progetto. Anche se fai una ricostruzione, Visual Studio non cancella necessariamente tutto in tutte le tue cartelle \ bin. Quando ho eliminato la DLL dal cestino e creato di nuovo, l'errore è andato via.


Ho appena fatto una ricostruzione e il problema è andato via senza dover eliminare manualmente la DLL. Grazie!
Trevor,

4

L'ho avuto in un'app MVC5 in Windows 10 contro IIS Express. La mia soluzione era la seguente:

  • Strumenti =>
    • Opzioni =>
      • Progetti e soluzioni =>
        • Progetti Web =>
          • Utilizzare la versione a 64 bit di IIS Express per siti Web e progetti

3

cambiarlo in 32 bit (vero) funziona

se ottieni questa lunghezza non può essere inferiore a zero. Nome parametro: problema di lunghezza nella configurazione del server iis, fai semplicemente la modifica della stringa di connessione nel file web.config come il nome del tuo server sql e il nome del server e riavvia iis, quindi prova a caricare la pagina che funziona


2

Se si pubblica in Visual Studio 2012 in caso di errore, provare a deselezionare l' opzione "Compilare durante la pubblicazione" nella procedura guidata Pubblica.

Deseleziona "Precompila durante la pubblicazione"


0

nell'applicazione Windows Form faccio questo, tasto destro del mouse su Progetto-> Proprietà-> Costruisci-> Seleziona la casella di controllo Prefer 32 bit. Ringrazia tutti


0
  1. Elimina la directory del test temporaneo che si trova qui C: \ Users (Utente) \ AppData \ Local \ Temp \ VisualStudioTestExplorerExtensions \

  2. Impostare tutti i progetti su x64 in Visual Studio

  3. Impostare l'architettura del processore predefinita su x64 (Test / TestSettings / Default Processor Architecture).

Assicurati di pulire il file della soluzione. Spero che questo aiuti!


0

La modifica del Target Framework nelle proprietà del progetto da .NET Framework 4.7.1 a 4.6.2 ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.