2017-07-06 66 views
0

之前,我想借此:檢查是否已存在大會通過名字加載它

try 
{ 
    Assembly assembly = Assembly.Load("This.Is.My.Assembly.Name"); 
} 
catch (Exception) 
{ 
} 

,做類似的事情,而是從來沒有拋出異常。也許做一些返回而不是異常的東西,在試圖加載它之前檢查程序集是否存在。什麼是最完美的方式來完成這個?

+1

你爲什麼要防止異常發生?這聽起來像是一個XY問題。加載程序集時可能會失敗;沒有找到請求名稱的文件只是該方法拋出異常的一個原因。 – CodeCaster

+0

*是最優雅的方式。這是例外情況。檢查null是向後退步。 – Blorgbeard

+0

在這種情況下,我正在檢查程序集中類的存在以確定是否支持某個功能。所有其他版本也使用這個相同的邏輯,所以對於10個版本,我會得到一個異常。對於一個支持的版本,它將工作並返回true。所以這就是爲什麼我不想獲得例外路線。所以更常見的情況會拋出一個異常,如果可能的話,我想避免這種異常。 – jsirr13

回答

0

您可以檢查執行的程序集是否有對程序集的引用。像這樣的東西。

if (Assembly.GetExecutingAssembly().GetReferencedAssemblies() 
       .FirstOrDefault(c => c.FullName == "This.Is.My.Assembly.Name") == null) 
{ 
    var assembly = Assembly.Load("This.Is.My.Assembly.Name"); 
} 
0

您可以檢查裝配這樣的:

bool IsAssemblyExists(string assemblyName) 
{ 
    foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
    { 
     if (assembly.FullName.StartsWith(assemblyName)) 
      return true; 
    } 
    return false; 
}