奇怪的尝试/捕捉行为

Mat*_*hew 5 c# oracle exception

我有一个简单的try/catch块

try
{
     // Open the connection
     _connection.Open(); // [1]
}
catch( OracleException ex ) // [2]
{
     // Handle the exception
     int x = ex.ErrorCode;
}
Run Code Online (Sandbox Code Playgroud)

永远不会执行catch并且运行时报告'[1]处的'OracleException未处理',这让我头疼.显然,我有一个关联异常类型的catch语句.我甚至在[2]尝试了完全限定类型的Oracle.DataAccess.Client.OracleException,但仍然没有处理异常.

我实际上能够捕获catch的唯一方法是在[2]处捕获System.Exception.是什么造成了这种奇怪的行为?

Chr*_*lor 4

您是否动态加载程序集,可能使用Assembly.LoadFrom或类似的东西?如果是这样,您可能会遇到这样的情况:您将多个类型加载到不同的加载上下文中。

加载到不同上下文中的程序集呈现具有不同标识的相同类型,因此它们与类型相等性检查等不匹配。

来自MSDN

  • 加载上下文包含通过探测找到的程序集:在 GAC 中、在主机程序集存储中(如果托管运行时)或在应用程序域的 ApplicationBase 和 PrivateBinPath 中。Load 方法的大多数重载都会将程序集加载到此上下文中。

  • 加载源上下文包含用户提供的路径未包含在探测搜索的目录中的程序集。LoadFrom、CreateInstanceFrom 和 ExecuteAssembly 是按路径加载的方法示例。

当然这只是我的猜测,所以我可能是错的。