2016-11-23 51 views
1

因此,在我的應用程序中,我有一個使用Pinvoke調用win32 dll中定義的某些函數的actor。我也有一個叫這些演員的前端web服務。使用PInvoke在Azure服務結構中加載dll

當我在本地運行時,一切正常。 win32 dll被找到並正確加載,我的演員可以從那裏調用函數。

但是,當我將解決方案部署到Azure時,我只是在演員嘗試加載dll時收到內部服務器錯誤。 Theres沒有描述性錯誤,所以我認爲演員要麼找不到dll,要麼找不到它的某個依賴關係。 我已經嘗試過使用dependency walker來找出依賴關係。大多數是典型的Windows二進制文件,但vcruntime140.dll除外。我已將此添加到VS項目通過對項目右擊一個資源文件,然後導航到添加>現有項,然後編輯資源的「複製到輸出目錄」屬性的解決方案資源管理器「始終複製」。這是否正確的方式部署一個本地DLL服務結構?我也在發佈模式下運行,所以不應該有任何調試DLL的需要。

一些額外的信息 - 我的項目最初從網絡API項目移植過來,我能夠在釋放模式託管在Azure上我的網絡API時成功調用函數在Win32 DLL。

讓我知道如果我需要提供一些額外的信息

回答

1

所以我想通了。對於誰可以在此之後絆倒人,這裏是如何:

當我用的Dependency Walker,我看到了,我對vcruntime140.dll和msvcp140.dll直接依賴關係。然而,通過深入挖掘,我注意到msvcp140.dll對concrt140.dll有一個額外的依賴。當我複製這到我的服務器的bin文件夾,我沒有再得到一個內部服務器錯誤,我可以打電話到我的Win32 DLL。

所有這些都是visual studio C++可重新分發的二進制文件,通常在這裏找到「C:\ Program Files文件(x86)\ Microsoft Visual Studio 14.0 \ VC \ redist \ x64 \ Microsoft.VC140.CRT」。