我想检查是否安装了正确版本的Oracle驱动程序,并且可以在应用程序运行之前找到,以便我可以显示错误消息并优雅地失败。这是一个c# windows窗体应用程序。
当我在没有正确Oracle版本的机器上运行应用程序时,我得到以下消息,应用程序处于挂起状态:
Could not load file or assembly 'Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. The system cannot find the file specified.
如何可靠地检查该程序集是否可用?
除了您自己的答案之外,您还可以使用AssemblyResolve
事件以一般方式(针对所有程序集加载问题)完成此操作。下面是一个例子:
AppDomain.CurrentDomain.AssemblyResolve += (sender, prms) => {
Console.WriteLine("Could not load assembly "{0}".", prms.Name);
Console.ReadLine();
Environment.Exit(1);
return null;
};
Assembly.Load("this asembly does not exist");
您可以使用System.Data.Common.DbProviderFactories来实现相同的目的。下面的示例代码可以为您检查。
private bool checkSpecifiedProviderExists()
{
var connectionStringSettings = ConfigurationManager.ConnectionStrings["YourConnectionString"];
var factory = DbProviderFactories.GetFactory(connectionStringSettings.ProviderName);
try
{
var dbConnection = factory.CreateConnection();
if(dbConnection !=null) return true;
return false;
}
catch
{
return false;
}
}