2012-07-27 12 views
8

Ho un progetto sito Web Web Form. Questo sito Web fa riferimento a 4 progetti di librerie di classi. 3 di queste librerie di classi fanno riferimento a un assembly di terze parti. Sto ottenendo il seguente errore del compilatore per ciascuno dei 3 progetti di libreria di classi.: MSB3270: si è verificata una mancata corrispondenza tra l'architettura del processore

ASPNETCOMPILER: Errore ASPCONFIG: Impossibile caricare il file o il montaggio 'myAssembly' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato. [Progetto. metaproj]

Ho provato tutte le possibili combinazioni di AnyCPU/x86/x64 sui progetti libreria di classi. Non posso cambiarlo sul progetto del sito web. Ho sia una versione x86 e x64 della dll di terze parti. Ho provato entrambi.

"ClassLibrary.csproj" (target di default) (4) -> (target ResolveAssemblyReferences) -> C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1561 , 5 ): avviso MSB3270: C'era una mancata corrispondenza tra l'architettura del processore progetto in costruzione "MSIL" e l'architettura del processore del riferimento "ThirdPartyDll, Version = xxx, Culture = neutral, processorArchitectu re = 86" , "x86". Questa mancata corrispondenza potrebbe causare errori di runtime. Si prega di considerare l'architettura del processore mirata del progetto tramite il Configurati su Manager in modo da allineare le architetture del processore tra il progetto ei riferimenti o fare affidamento sui riferimenti con un'architettura del processore th alle corrispondenze dell'architettura del processore di destinazione del tuo progetto. [ClassLibrary.cspro j]

Il soffietto illustra la configurazione della soluzione. Nota Non posso cambiare da "AnyCPU" qui, solo all'interno di ogni singolo progetto di libreria di classi.

Solution configuration

Tutti .NET 4

Conversione del sito Web per un'applicazione Web non è un'opzione.

Grazie,

+0

Vedere la risposta di David Sacks qui: http://stackoverflow.com/questions/10113532/visual-studio-c-c-solution-hitting-mismatch-between-processor-architecture –

risposta

5

Ovviamente, si dispone di una DLL nativa a 32 bit. Quindi il pool di applicazioni su IIS deve essere configurato per eseguire il framework .NET in modalità a 32 bit.

Questo può essere configurato in Gestione IIS. Vai su "Pool di applicazioni", seleziona il pool di applicazioni pertinente e apri la finestra di dialogo "Impostazioni avanzate ...". L'opzione a 32 bit è vicino alla cima.

+0

La stessa cosa si verifica con una versione a 64 bit della dll di terze parti. Imposterò il pool di applicazioni a 32 bit una volta che sto distribuendo su un server di sviluppo. –

+0

Quindi sembra che la libreria di terze parti abbia ulteriori dipendenze che non possono essere trovate come la DLL di runtime C di Microsoft. Che DLL è comunque? Uno privato o una libreria open-source? – Codo

+0

http://dtsearch.com/ –

0

uno dei tuoi gruppi di riferimento è solo x86 e quindi la catena di progetto che fa riferimento deve essere costruito solo per x86. Assicurarsi inoltre che quando si distribuisce il pool di applicazioni sia configurato per 32 bit.

+0

Ho provato questo. Impostazione di tutti i progetti su x86. Ottengo errore Impossibile caricare il file o l'assembly 'Progetto' o una delle sue dipendenze. Si è tentato di caricare un programma con un formato errato. Con la DLL x86 di terze parti e tutto impostato su x86. –

+0

Assicurarsi di averlo fatto per la configurazione della soluzione. Fai una pulizia. Ricontrolla di non avere una versione locale in conflitto o una in GAC. Tieni presente che se la libreria di terze parti A è a 32 bit e il progetto B la utilizza, allora il progetto C utilizza il progetto B - tutti e tre devono essere x86 –

+0

GAC non ha una versione. Cosa intendi esattamente per versione locale? Nella cartella bin? E da 'all solution Configuration'? Vedi sopra modifica (cattura schermo della soluzione opzione 'AnyCPU'). –

Problemi correlati