2011-06-06 109 views
1

我有下面的代码扔了BadImageFormatException。它加载的DLL是32位。 Web服务器运行Windows 64位,但应用程序池设置为启用32位。有什么办法可以让这个工作?ASP.Net MVC DllImport BadImageFormatException 32bit/64bit

public class HomeController : Controller 
{ 
    [DllImport("CDCrypt.dll")] 
    [return: MarshalAs(UnmanagedType.LPStr)] 
    public static extern String Encrypt 
     ([MarshalAs(UnmanagedType.LPStr)] String aName); 

    [DllImport("CDCrypt.dll")] 
    [return: MarshalAs(UnmanagedType.LPStr)] 
    public static extern String Decrypt 
     ([MarshalAs(UnmanagedType.LPStr)] String aName); 

    public ActionResult Index() 
    { 
     try 
     { 
      ViewBag.EncryptString = Encrypt("test"); 
     } 
     catch (Exception e) 
     { 
      ViewBag.EncryptString = 
       "Stack Trace\r\n:" + "\r\nException: " + e.Message; 
      return new HttpStatusCodeResult(500); 
     } 
     return View(); 
    } 

    public ActionResult Up() 
    { 
     ViewBag.Up = "You can see me"; 
     return View(); 
    } 
} 
+0

你编译它为32位或任何CPU的? – 2011-06-06 16:11:20

+0

我已经试过并且都不能加载dll – Jon 2011-06-06 16:13:44

+0

什么是CDCrypt.dll?您必须将您的WP设置为使用与任何非托管dll相同的“bitness”。如果你有不止一个,他们必须全部匹配。 – Andy 2011-06-06 16:37:34

回答

1

图书馆和消费者都必须是相同的。因此,请确定您所调用的lib是什么,并确保您正在编译该类型。现在 - IIS本身(至少v 6)只能运行一种模式或其他的的一切,所以它需要在整个板上设置为64或32位。看到这个 http://support.microsoft.com/kb/894435

会同:

http://social.msdn.microsoft.com/Forums/en-US/netfx64bit/thread/35b09f74-1d8e-4676-90e3-c73a439bf632/

+0

它使用iis 7,我试图编译网站对x86,但没有运气 – Jon 2011-06-06 17:05:54

+0

嗯.. iis 7然后我认为只需要工作进程是32位 - 把一些代码,以确保你是32位作为一个双重检查 - http://stackoverflow.com/questions/1953377/how-to-know-a-process-is-32-bit-or-64-bit-programmatically – 2011-06-06 17:10:15

+0

我在该链接中添加了代码,针对x86编译运行网页,它说它的32位这将表明一切都OK,为什么例外http://encrypt.tbmaster.co.uk/home/up显示输出。 http://encrypt.tbmaster.co.uk/home/index是问题 – Jon 2011-06-06 17:23:45