2012-04-05 61 views
2

這與a question有關,我昨天問。簡而言之,我遇到的問題是我有兩個相互衝突的程序集版本。一個在appbase中,另一個在PrivateBinPath中。更改程序集解析程序搜索順序

從我瞭解的集解析器首先搜索應用平臺,然後在私人路徑搜索。問題在於,根據我通過運行融合日誌得到的信息,如果解析器在appbase中發現錯誤的版本,則會引發錯誤,說明版本不匹配並停止探測。

我需要使用位於應用平臺的引用,是因爲它排除了應用平臺設置PrivateBinPathProbe是不是一種選擇。有沒有什麼辦法可以改變先在PrivateBinPath中搜索的順序?

作爲一個方面說明,我不明白爲什麼解析器只是給了,如果找到的是錯誤的版本。

+0

是組件強有力的命名?我們在討論兩個不同程序集版本或相同程序集版本和不同文件版本的文件嗎? – 2012-04-05 15:55:23

+0

@mike z:強大的命名組合,不同的版本。 – user472875 2012-04-05 15:56:35

回答

1

有AFAIK沒有選擇這樣做...

您可以但是實現一個解決方法:

另一種選擇是依賴嵌入到EXE/DLL,所以沒有需要搜索的任何路徑都 - 有關選項可以參見here

+0

也許我做了一些錯誤的事情,但我試圖跟蹤處理程序捕獲的所有AssemblyResolve事件,而我從來沒有出現過。 – user472875 2012-04-05 15:50:50

+0

@ user472875是很難診斷沒有更多的細節/源代碼等。一種可能的解釋是,裝載2個不同版本的程序集到相同的過程可能會導致奇怪的效果...... – Yahia 2012-04-05 15:53:58

+0

略有不同的情況,但因爲它是,我解包到PrivateBinPath中的資源實際上嵌入在覈心DLL中。我有一個選擇是在文件路徑上使用Assembly.LoadFrom手動加載程序集。儘管如此,我真的很想避免這種攻擊。 – user472875 2012-04-05 16:02:59

2

AssemblyResolve事件僅調用的時候,以前的查找沒有全成。所以,你必須該方法從葉海亞的答案從你前面的問題相結合:

  1. 設置PrivateBinPathProbe使融合不會在應用平臺目錄中查找。
  2. 實施一個AssemblyResolve事件,該事件解析到您的AppBase目錄的路徑。
  3. ...
  4. 利潤!因此事件被炒魷魚

的第一步是很重要的。