[英]Windows Azure not finding DLL of C++/CLI project
我有一個包含非托管C壓縮庫的C ++ / CLI項目,該項目由調用C ++ Compress函數的MVC3項目引用。
一切都在本地工作正常,但當我將解決方案發布到Azure雲時,我得到一個錯誤,說它無法找到模塊/ dll:
無法加載文件或程序集“LZGEncoder.DLL”或其依賴項之一。 指定的模塊無法找到。
為什么找不到DLL文件? 是去了錯誤的地方還是正在編譯? 有什么方法可以檢查嗎? 謝謝!
問題是雲端缺少Visual C ++ 2010 Runtime庫。
我所做的是將Visual C ++ 2010 Redistributable包添加到項目中,以及在啟動時靜默安裝它的腳本,現在是本機dll的工作。 如果你使用的是原生C dll,你也需要這個。
腳步:
1) 下載Visual C ++ 2010 Redistributable Package ,並將其添加到您的項目中。
2)創建一個新的批處理文件並將其添加到它:
vcredist_x64.exe /q /norestart
exit /b 0
3)打開ServiceDefinition.csdef文件並將其添加到相關的WebRole元素下:
<Startup>
<Task commandLine="InstallVCRedist.bat" executionContext="elevated" taskType="simple" />
</Startup>
更新:
Visual C ++ 2012已經完成並且相同的腳本可以運行,但是每個人都應該確保Azure運行至少Windows Server 2008 R2 ,否則啟動任務將掛起並且該角色將永遠不會啟動(直到您在任務管理器中終止vcredist進程通過RDP)。
如果要驗證Azure VM上的內容,只需嘗試解壓縮CSPKG文件,然后再解壓縮.CSSX文件(只需將CSSX重命名為zip)並匹配每個引用都在那里。 這樣您就可以匹配VM上的內容。 驗證VS中缺少的DLL后,選擇參考DLL並將其屬性“Copy Local”設置為“True”。
您需要將所有dll放在實時服務器上存在的文件夾中。 如果您從本地添加引用並且該實時不存在該位置,則無法在實時上構建代碼。 因此,在實時部署代碼之前,請確保所有dll都存在於實時。
確保C ++ dll和非托管C庫(如果它是.dll而不僅僅是源代碼)都包含在服務包中,並確保編譯器將C ++庫轉儲到正確的位置。 這篇文章有一個不錯的演練。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.