2010-04-07 3 views
8

Sto cercando di compilare (utilizzando Visual Studio) un sito web ASP.Net con la libreria Chilkat. La compilazione non riesce a causa di questo errore:Come compilare il sito Web x64 asp.net?

Could not load file or assembly 'ChilkatDotNet2, Version=9.0.8.0, Culture=neutral, PublicKeyToken=eb5fc1fc52ef09bd' or one of its dependencies. An attempt was made to load a program with an incorrect format.

Mi è stato detto che questo errore si verifica a causa della non conformità della piattaforma.

La cosa strana è che anche se la compilazione fallisce, il sito funziona una volta effettuato l'accesso da un browser. La mia teoria è che la compilazione di IIS utilizza il compilatore csc.exe dalla cartella Framework64 (64 bit) mentre il Visual Studio utilizza il compilatore csc.exe dalla cartella Framework (32 bit). Se questo è effettivamente, , come posso configurare il mio Visual Studio per l'esecuzione con il compilatore a 64 bit per i siti ASP.Net?

Questa è la mia configurazione attuale sviluppo:

  • Windows 7 (x64).
  • Visual Studio 2008 Pro (x86 ovviamente ...).
  • Chilkat (x64)
  • IIS/Asp.net (x64).

risposta

25

The Why:
Il tuo sito web (la parte gestita, probabilmente tutto questo non terzi) non è compilato in modalità a 32 o 64 bit, almeno non nel modo in cui si è pensiero. La differenza è che WebDevServer.exe (una versione di Cassini) utilizzata da Visual Studio per il suo server web è esclusivamente a 32 bit. Quindi, carica solo DLL compatibili a 32 bit.

IIS su una macchina a 64 bit può essere eseguito in modalità 32 o 64 bit (valore predefinito a 64 bit), a seconda delle impostazioni di configurazione, quindi non ha problemi a caricare l'applicazione.

Soluzione: Purtroppo, non ci sono un sacco di opzioni qui, I asked the same question a while ago. La soluzione migliore è utilizzare IIS per il debug. Si imposta in questo modo:

  • Web Progetto> Impostazioni
  • "Web" Scheda
  • In Server, selezionare Usa IIS Local Web Server
+0

In realtà, sto vedendo ** compilation ** fallire per tali progetti (che OP sembrava indicare) su 64-bit per 64-bit. (in Visual Studio ... tuttavia il sito funziona bene in IIS o in una build di Cassinidev a 64 bit) Niente è più frustrante dell'attesa fino a quando la pagina web viene caricata per scoprire che 'lint x = 1;' dovrebbe essere 'int x = 1; ' –

0

La soluzione è quella di mettere entrambi delle DLL (x64 & DLL x86) in GAC e lasciare ogni applicazione decidere dinamicamente quando utilizzare la DLL x64 o x86 (ovviamente si dovrà fare riferimento alla DLL GAC nel progetto).

Ho discusso personalmente con lo sviluppatore di ChilkatDotNet2 e questa è una soluzione su cui entrambi abbiamo concordato.