2016-06-17 10 views
2

본인은 이러한 오류가 여러 번 논의 된 것을 이해합니다. 일부는 DLL 파일의 버그 였고 일부는 DLL 버전을 변경하여 해결했으며 다른 하나는 단서를 갖고 있지 않은 것으로 보입니다. 어쨌든 나는 행운을 시험해보기 위해 게시한다.Oracle DataAccess 관련 : "호출 된 멤버가 동적 어셈블리에서 지원되지 않습니다."

C# GUI에서 그리드의 행을 선택할 때 응용 프로그램이 충돌했다. 나는 그것이 내 로컬 컴퓨터 함께 할 수있는 뭔가가 알 수 있도록

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() 

내 동료는이 문제가 발생하지 않았다 스택 트레이스는 것 같습니다. 내 동료가 사용

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 

:

나는 (: /windows/Microsoft.NET/assembly 전 C에서, 닷넷 4.0를 사용) 것 같습니다, GAC에 Oracle.DataAccess.dll을 보았다 : V2.121.3.0 및 관리되는 DLL 없음 내 DLL이 VS2015와 VS2013을 사용하는 이유는 DLL이 VS2015와 VS2013을 사용한다는 것입니다. 따라서 VS2015에서 빌드되고 실행되는 Oracle DLL을 오랫동안 알게되었습니다.

가장 가까운 게시물은 여기에 있습니다 : Passing Oracle UDT to stored procedure throws error on ExecuteNonQuery하지만 해결 방법이 없습니다.

+0

코드를 알려주시겠습니까? –

+0

Visual Studio의 모든 버전에서 V2.121.3.0 및 V4.121.2.0을 모두 사용할 수 있습니다. 그러나 설치된 버전은 .NET 대상 컴파일러 설정과 일치해야합니다. 즉, 버전 4.xxx의 대상 버전을 3.0 이상으로 설정해야합니다. 버전 2.xxx를 사용하려면 컴파일러 대상 버전이 2.0이어야합니다 (더 이상 사용할 수 없음) –

+0

@Wernfried Domscheit, 죄송합니다. 애플리케이션 바이너리 만 실행 및 테스트 할 수 있습니다. 소스가 없습니다. :-( –

답변

0

누구든지이 문제가 계속되는 경우. 오라클 드라이버를 11에서 12로 업그레이드하려고 할 때도 똑같은 일이 발생했습니다. *.

런타임에 GAC에서 2.12 * 및 4.12 * Oracle.DataAccess 어셈블리를로드하는 것으로 나타났습니다.

빠른 솔루션은 .Net Framework 4 *에서 우리의 앱을 대상으로 한 이후 런타임 어셈블리를 4.12 *로 리디렉션하는 것입니다. *. 내가 선호하는 솔루션은 Managed Oracle Driver NuGet 버전을 사용하도록 마이그레이션하는 것입니다.

나는 여전히 @ dll에서 @ AardVark71이 언급 한 dll (! assembly.IsDynamic)을 체크하더라도 왜 예외를 던지는지 알 수 없었다. 그러나 "assembly.Location"라인은 12에 소개되었습니다. * Oracle Driver. 또한 왜 오라클의 두 버전을로드했는지 확실하지 않습니다. 데이터 액세스 어셈블리