2016-03-17 53 views
0

我有一個c#mvc應用程序,它使用C++ dll進行一些較重的統計計算。一切工作正常,當我在本地運行,但在我部署的應用程序我得到的是無法訪問部署的c#mvc項目上的dll文件

例外:無法加載DLL ' HandCalculatorDll.dll ':指定的模塊找不到。 (異常來自HRESULT:0x8007007E)

C#的模型是使用

[DllImport("HandCalculatorDll.dll", CallingConvention = CallingConvention.Cdecl)] 
    public static extern bool CalculateWinner(int[] req); 
    public RoundResult CalculateWinnerDll(List<Hand> hands, List<Card> board) 
    { 
     // set up the request 
     // calls the dll 
     var success = CalculateWinner(reqArr); 
     // interpret the response 
     return result; 
    } 

我已經嘗試了幾種不同的事情,但似乎沒有任何一個部署項目。我嘗試將dll添加到項目中並將其從項目中移除(基於不同的建議)。我嘗試了幾種相對和絕對路徑的變體。我用

System.Web.Hosting.HostingEnvironment.MapPath("/bin"); 

找上了託管PC的abolute路徑,放在DLL在bin文件夾,並使用該路徑作爲DllImport屬性。

不幸的是,我發現的大部分建議/解決方案只適用於本地調試。有誰知道如何解決這一問題?

UPDATE 我複製整個項目到第二計算機上運行,​​並在該計算機被投擲時,我發佈時發生的相同的「無法加載DLL」錯誤。我在第二臺計算機上以與我的家用計算機完全相同的方式運行所有內容,並驗證該文件在那裏。現在我真的很困惑...

+0

只要確保:您是否在您的VS項目中包含該DLL?如果是這樣,你有設置它的屬性,以便它複製到構建輸出目錄? –

+0

是的,我嘗試了兩種方法。沒有骰子... – nurdyguy

+0

一旦發佈,你的dll在bin文件夾或不是?並且是你的dll 32位?嘗試將您的Web項目設置爲x86或在IIS中將應用程序池設置爲32位。 – Chris

回答

0

嘗試右鍵單擊項目中的引用,單擊屬性並確保它設置爲複製本地。

+0

我目前有複製到輸出目錄設置爲複製,如果較新,但我不知道這是否是你所指的。 – nurdyguy

+0

聽起來沒錯。另一件事是確保你的dll所在的文件夾在你的項目中。原因發佈時只會將項目中的文件夾複製到服務器 –

+0

我已經嘗試了幾個變體,包括從主項目文件夾運行dll。似乎沒有任何工作。 – nurdyguy