2010-06-23 38 views
2

我有一個強命名的程序集,安裝到特定的文件夾(而不是GAC)。如圖反射從特定路徑加載強名稱程序集?

名稱爲:

"Foo.Bar.TreeFrog, Version=1.2.1.0, Culture=neutral, PublicKeyToken=ac88c4a8b22089b4" 

,並在那裏它的安裝路徑是

"c:\\QueueBall" 

我可以使用Assembly.LoadAssembly.LoadFrom加載它,如果又如何?

我可以確保強命名得到遵守,即我正在加載的DLL確實是我期待的DLL,而不是具有相同名稱的冒名頂替者?

+0

嘖,嘖。直接從驅動器的根目錄創建自己的文件夾不是一個好主意。 – 2010-06-23 17:24:32

+0

@Joel--不是我能控制的,唉。這不是我的DLL,也不是來自我的安裝程序。 – Eric 2010-06-23 19:03:09

回答

7

你可以使用LoadFrom

var assembly = Assembly.LoadFrom(@"c:\QueueBall\Foo.Bar.TreeFrog.dll"); 

注意,這也將引用的程序加載到運行該代碼的應用程序域。如果你不想要這種行爲,你可以使用LoadFile方法。


UPDATE:

你可以加載它,以確保它沒有被篡改之前檢查裝配身份:

AssemblyName an = AssemblyName.GetAssemblyName(@"c:\QueueBall\Foo.Bar.TreeFrog.dll"); 
byte[] key = an.GetPublicKey(); 
Version version = an.Version; 
+0

謝謝。是否有任何方法可以檢查強名稱是否正確 - 即某人沒有使用相同的文件名替換其自己的DLL,但簽名錯誤? – Eric 2010-06-23 17:55:01

+0

@Eric,看我的更新。 – 2010-06-23 20:31:44

相關問題