asp.net核心Oracle.DataAccess System.BadImageFormatException:无法加载文件或程序集Oracle.DataAccess

时间:2016-02-08 13:43:35

标签: c# .net oracle asp.net-core odac

我添加了Oracle.DataAccess作为asp.net核心项目的参考。 我在安装ODAC时只为.Net安装了Oracle Data Provider。 我想在项目中用Dapper做一个简单的例子。

public class Program
{
    const string connectionString = "xxxxx";
    public static void Main(string[] args)
    {
        IDbConnection connection = new OracleConnection(connectionString);
        string sql = "SELECT * FROM People WHERE  Name='JOHN'";
        var r = connection.Query<People>(sql);
    }
}

应用程序未运行。当我在项目文件夹上尝试“dnx run”时,我收到了以下错误。

  

System.BadImageFormatException:无法加载文件或程序集   'Oracle.DataAccess,Version = 4.121.2.0,Culture = neutral,   PublicKeyToken = 89b483f429c47342'或其依赖项之一。一个   尝试加载格式不正确的程序。

如果收到此消息,可能意味着GAC中不存在Oracle.DataAccess dll。

  1. 打开命令行并转到odp.net下的bin文件夹,例如

    cd C:\oracle\product\12.1.0\client_x86\odp.net\bin\4

  2. 在下面运行此命令

    
    OraProvCfg.exe /action:gac /providerpath:C:\oracle\product\12.1.0\client_x86\odp.net\bin\4\Oracle.DataAccess.dll

  3. 完成这些步骤后,我能够成功运行项目。

1 个答案:

答案 0 :(得分:1)

BadImageFormat表示dll与运行时不兼容。

问题是Oracle尚未发布与.NET Core兼容的驱动程序。

您仍然可以使用ASP.NET Core中当前可用的驱动程序,但仅限在完整的桌面.NET框架上运行,而不是在.NET Core Framework上运行。

您应该能够解决此问题的方法是从project.json文件中删除dnxcore50目标,以便仅定位桌面框架。

这样做意味着您现在只能在Windows上运行,但稍后当Oracle发布兼容驱动程序时,您可以选择以.NET Core框架为目标。