2011-06-06 92 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