2010-04-07 5 views
8

J'essaie de compiler (en utilisant Visual Studio ) un site ASP.Net avec la bibliothèque Chilkat. La compilation échoue en raison de cette erreur:Comment compiler x64 asp.net site web?

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.

On m'a dit que cette erreur se produit en raison de la non-conformité de la plate-forme.

La chose étrange est que, bien que la compilation échoue, le site fonctionne une fois accédé à partir d'un navigateur. Ma théorie est que la compilation IIS utilise le compilateur csc.exe du dossier Framework64 (64 bits) tandis que le Visual Studio utilise le compilateur csc.exe du dossier Framework (32 bits). Si c'est le cas, comment puis-je configurer Visual Studio pour qu'il s'exécute avec le compilateur 64 bits pour les sites ASP.Net?

Ceci est ma configuration actuelle de développement:

  • Windows 7 (64 bits).
  • Visual Studio 2008 Pro (x86 bien sûr ...).
  • Bibliothèque Chilkat (x64)
  • IIS/Asp.net (x64).

Répondre

25

Le Pourquoi:
Votre site web (la partie gérée, probablement tout cela non tiers) n'est pas compilé en mode 32 ou 64 bits, au moins pas dans la façon dont vous êtes en pensant. La différence est que WebDevServer.exe (une version de Cassini) que Visual Studio utilise pour son serveur Web est exclusivement 32 bits. Ainsi, il ne charge que les DLL compatibles 32 bits. IIS sur une machine 64 bits peut fonctionner en mode 32 ou 64 bits (par défaut 64 bits), en fonction des paramètres de configuration, ce qui lui permet de charger votre application sans problème.

Solution: Malheureusement, il n'y a pas beaucoup d'options ici, I asked the same question a while ago. Votre meilleur pari est d'utiliser IIS pour le débogage. Vous définissez comme ceci:

  • Projet Web> Paramètres
  • "Web" Tab
  • Sous Serveurs, sélectionnez Local Utiliser serveur Web IIS
+0

En fait, je vois ** compilation ** échouer pour de tels projets (que OP semblait indiquer) sur 64 bits pour 64 bits. (dans le studio visuel ... pourtant le site tourne bien dans IIS ou une version 64 bits de cassinidev) Rien n'est plus frustrant que d'attendre que votre page web se charge pour découvrir que 'lint x = 1;' devrait être 'int x = 1; ' –

0

La solution est de mettre à la fois des DLL (les DLL x64 & x86) dans le GAC et laissez chaque application décider de manière dynamique quand utiliser la DLL x64 ou x86 (bien sûr, vous devrez faire référence à la DLL GAC dans votre projet).

J'ai personnellement discuté avec le développeur de ChilkatDotNet2 et c'est une solution sur laquelle nous nous sommes mis d'accord.