2012-11-29 37 views
2

我有一個託管程序集加載問題源自衍生的混合模式進程。詳情請參閱下文。假設BinPath和ExecutablePath是兩個不同的有效路徑。裝配加載失敗

我有一個在BinPath開始一個web應用程序,並創建使用下面的ProcessStartInfo的過程:

new ProcessStartInfo() 
{ 
    FileName = ExecutablePath + "PerformanceRunner.exe", 
    WorkingDirectory = ExecutablePath , 
    UseShellExecute = true     
}; 

PerformanceRunner.exe然後成功加載駐留在ExecutablePath(這是通過觀察驗證幾個託管DLL在VS的模塊窗口中)。然後它會嘗試加載位於ExecutablePath中的託管程序集,但這會失敗。這裏是融合日誌 - 注意BinPath是「G:\ TOPSS \ TOPSS New \ Common \ Service \ Bin」,託管程序集是TPSSCDQ.dll。 TPSSCDQ駐留在ExecutablePath中。


*大會粘結劑日誌條目(2012年11月29日@下午4時16分11秒)*

操作失敗。綁定結果:hr = 0x80070002。系統不能 找到指定的文件。 C:從加載

大會經理\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ clr.dll下 可執行摹運行:\ TOPSS \ TOPSS新建\ COMMON \服務\ BIN \ PerformanceRunner.exe


===預綁定狀態信息===

LOG:用戶= CORP \ lbhra

LOG:DisplayName的= TpssCDQ,版本= 1.0.4612.26218文化=中性, 公鑰=空(完全指定的)

LOG:應用平臺=文件:/// G:/ TOPSS/TOPSS新建/公共/服務/濱/

LOG:初始PrivatePath = NULL

LOG:動態基地= NULL

LOG:高速緩存基址= NULL

LOG:AppName的= PerformanceRunner.exe

調用組件:(未知)。

===

LOG:此綁定默認加載上下文開始。

LOG:找不到應用程序配置文件。

LOG:使用主機配置文件:

LOG:從 C使用計算機配置文件:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。

LOG:政策沒有被在這個時間(私人, 定製,部分,或基於位置的組件綁定)施加到參考。

LOG:試圖下載新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ.DLL。

LOG試圖下載新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.DLL。

LOG:嘗試新的URL文件下載:/// G:/ TOPSS/TOPSS 新/通用/服務/斌/ TpssCDQ.EXE。

LOG試圖下載新的URL文件:/// G:/ TOPSS/TOPSS New/Common/Service/Bin/TpssCDQ/TpssCDQ.EXE。

LOG:所有探測URL嘗試失敗。


我不完全理解的PrivatePath,應用平臺或DYNAMICBASE是,但不應將這些路徑中的至少一個是工作目錄(ExecutablePath)?我已驗證使用GetCurrentDirectory工作目錄設置正確。我真的很感激這個,因爲我很困惑。

回答

0

你說得對,它應該在存儲可執行文件的根文件夾中查找。它不會查看工作目錄 - 但我明白在這種情況下,這些路徑是相同的。如果你看看你的錯誤信息,APPBASE設置正確,所以我認爲它在正確的位置看,但沒有找到它的其他原因。

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.90).aspx

其他檢查事項:

  • 你在你的應用程序/機器的配置文件中的任何組件加載提示?
  • 是否爲正確的平臺構建了託管DLL?
  • 託管的DLL是否已被重命名 - 文件名是否與清單匹配?
  • 所有託管DLL的依賴項都存儲在同一位置嗎?

另外,你是如何加載此程序集?它是否列爲項目的參考,或者您是否在調用Assembly.Load(或類似的)?