我的團隊最近從VS2008升級到VS2015。我們的項目是C#SDK層和C++核心庫的組合,它們以混合模式CLR和直接非託管引用/ pinvoke工作。IIS 7.5+ 64位無法加載C++ CLR dlls
針對桌面可執行文件的VS2015編譯在跨多個環境的託管和非託管版本中都能很好地工作。但是,當我們在IIS/bin中使用相同的.NET驅動程序和C++庫時,Web服務器無法加載任何使用CLR編譯的C++ dll。這是在VS2015之內,並且在我們的開發和生產箱之外。我們可以設置任何C++司機到託管CLR,我們看到了失敗的結果:
錯誤無法加載文件或程序集「ConfigAuth.DLL」或它 的一個依賴。指定的模塊無法找到。
該文件清楚地發現,PATH變量三重檢查。我們運行了進程監視器來查找dll文件加載問題,並且似乎無法找到任何能夠提供缺少內容的線索。過去我們遇到了缺少可重新分發包的問題,並且已經讀過一些組合失敗的問題。我們已經卸載並重新安裝了這些軟件包,但也許我們是在錯誤的順序/組合中執行它?
發展箱/配置:
Windows 7中,64位的環境
以下VS C++可再發行的軟件包被安裝在盒:2012,2013,2015(均爲86/64爲每個)
的SxS合併2012-2015模塊安裝
所有文件編譯成的Win32/x86平臺
.NET 4.5用於編譯的ASP.NET WCF服務建立以及所有C#管理的DLL
.NET 4.0是用於編譯的C++ CLR的mscorlib程序
IIS 7.5+ 64位具有麻煩裝載在VS2015上使用2015工具包編譯的C++庫。
IIS應用程序池支持32個組件
IIS應用程序池已設置了訪問
PATH變量已設置並針對加載就好非其他文件測試文件中的所有目錄和Windows的訪問權限CLR
感謝這一點,我們使用了這兩個工具,發現一個較低級別的驅動程序失敗。我們知道,如果我們在加載的任何驅動程序上使用/ clr選項,IIS將無法加載它們。如果我們關閉/ clr,它們會加載。我很確定它正在GAC中檢查具有/ clr設置的驅動程序,這可以解釋我們的問題。如果我們將它放到項目的Bin文件夾中,我們設置爲/ clr的驅動程序肯定無法編譯,如果我們將它放到PATH文件夾中,它仍然不會加載。來自Fusion Loggin的錯誤:從文件中提取清單導入時出錯(hr = 0x80131018)。 –
它也從bin文件夾中找到這個較低的lib。所以,如果它製作影子副本,我有點迷路。這在VS 2015 IDE Express IIS和IIS獨立內部失敗。 日誌:大會下載成功。嘗試安裝文件:C:\ Users \ kieran \ Source \ Repos \ iTrace \ 2dmi \ WebAPI \ bin \ BitShuffle.dll 日誌:進入下載緩存設置階段。 ERR:從文件中提取清單導入時出錯(hr = 0x80131018)。 錯誤:安裝失敗,hr = 0x80131018。 ERR:無法完成程序集的設置(hr = 0x80131018)。探測終止。 –