2017-07-06 60 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; 
}