我想使用反射動態加載GAC中程序集的最新安裝版本。從GAC動態加載最新的程序集版本
到目前爲止,我已經找到了多種工作方式來完成這個任務,但他們都有其特定的缺點。
最簡單的解決方案是使用Assembly.LoadWithPartialName()
方法。但這種方法已經過時了,因爲.NET框架2:
var assembly = Assembly.LoadWithPartialName("Microsoft.WindowsAzure.ServiceRuntime");
另一種可能性是使用Assembly.Load()
(所推薦的過時的警告),並調用不同的裝配版本的完全限定程序集名稱在try/catch塊獲取最新安裝的版本。這尖叫維護,只是看上去很髒:
Assembly assembly = null;
try
{
assembly = Assembly.Load("Microsoft.WindowsAzure.ServiceRuntime, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
}
catch (FileNotFoundException) { }
try
{
assembly = Assembly.Load("Microsoft.WindowsAzure.ServiceRuntime, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");
}
catch (FileNotFoundException) { }
最後但並非最不重要的還有another solution我發現這裏的SO使用Assembly.LoadFrom()
方法,然後基本上導入組件管理器模塊fusion.dll
推測的最新版本的路徑。對於這樣一個「簡單」的任務來說,這似乎太過分了。
沒有更好的解決方案來實現這一點,而無需使用過時的方法,使用魔法字符串或通過調用非託管代碼創建維護地獄?
在此先感謝!
[Assembly.LoadFrom()](http://msdn.microsoft.com/en-us/library/system.reflection.assembly.loadfrom)如何? – 2012-07-25 22:28:46
是的,這是第三種解決方案。但它需要fusion.dll來確定GAC中最新版本的路徑。 – 2012-07-25 22:30:04