簡體   English   中英

Windows Azure未找到C ++ / CLI項目的DLL

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM