- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道在 SO 上已经多次讨论过这样的错误。有的说是 DLL 文件的 bug,有的通过更改 DLL 版本解决,有的好像没有任何线索。不管怎样,我只是发帖试试运气:
在 C# GUI 上选择网格中的一行时,我的应用程序崩溃了。 stackTrace 看起来像:
System.NotSupportedException: The invoked member is not supported in a dynamic assembly.
at Oracle.DataAccess.Types.OracleUdt.GetAllReferencedAssemblies()
at Oracle.DataAccess.Client.RegAndConfigRdr.setudtmapping(Hashtable& s_mapUdtNameToMappingObj)
at System.Reflection.Emit.InternalAssemblyBuilder.get_Location()
at Oracle.DataAccess.Types.OracleUdt.SetCustomTypeMappings()
at Oracle.DataAccess.Types.OracleUdt.GetUdtName(String customTypeName, String dataSource)
at Oracle.DataAccess.Client.OracleParameter.SetUDTFromCustomObject(OracleConnection conn, IOracleCustomType customObj, Int32 i)
at Oracle.DataAccess.Client.OracleParameter.PreBind_OracleObject(OracleConnection conn)
at Oracle.DataAccess.Client.OracleParameter.PreBind_Object(OracleConnection conn)
at Oracle.DataAccess.Client.OracleParameter.PreBind(OracleConnection conn, IntPtr errCtx, Int32 arraySize)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
at Oracle.DataAccess.Client.OracleCommand.ExecuteReader()
我的同事没有遇到这个问题,所以我认为它与我的本地机器有关。
我在 GAC 中查找了 Oracle.DataAccess.dll,它看起来像(我使用的是 .Net 4.0,在 c:/windows/Microsoft.NET/assembly 下):
find . -name "Oracle.*DataAccess*.dll"
./GAC_32/Oracle.DataAccess/v4.0_4.121.2.0__89b483f429c47342/Oracle.DataAccess.dll
./GAC_MSIL/Oracle.ManagedDataAccess/v4.0_4.121.2.0__89b483f429c47342/Oracle.ManagedDataAccess.dll
我的同事使用:V2.121.3.0 并且没有托管 dll。我的 DLL 与他们的不同的原因是我使用 VS2015 而他们使用 VS2013,我花了一段时间才找出正确的(至少到那时)在 VS2015 下构建和运行应用程序的 Oracle DLL。
最近的帖子在这里:Passing Oracle UDT to stored procedure throws error on ExecuteNonQuery但它没有解决方案。
最佳答案
万一还有人遇到这个问题。当我尝试将 Oracle 驱动程序从 11.* 升级到 12.* 时,同样的事情发生在我身上。
我发现在运行时,它会从 GAC 加载 2.12* 和 4.12* Oracle.DataAccess 程序集。
快速解决方案是将运行时程序集重定向到 4.12*,因为我们的应用程序目标是 .Net Framework 4.*。我的首选解决方案是迁移到使用托管 Oracle 驱动程序 NuGet 版本。
我仍然不明白为什么它会抛出异常,即使他们在 dll 中检查了 (!assembly.IsDynamic),正如 @AardVark71 提到的那样。但是在 12.* Oracle Driver 中引入了“assembly.Location”这一行。也不太清楚为什么它加载了两个版本的 Oracle.DataAccess 程序集
关于c# - Oracle DataAccess 相关 : "The invoked member is not supported in a dynamic assembly.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37889849/
我是一名优秀的程序员,十分优秀!