ORACLE

C# Assembly Binding

하이안 2015. 8. 24. 19:50

증상 : Oracle 11g Instant Client로 C# 응용 프로그램 배포 시 기존 클라이언트에 Oracle 12c Client가 설치되어 있는 경우 에러가 발생함 ( Oracle.DataAccess.Client.OracleException: The provider is not compatible with the version of Oracle client )


원인 : Oracle.DataAccess.dll 버전 충돌


해결 : C#의 App.config에서 Assembly Binding 사용하여 내가 사용할 DLL 파일 버전과 위치 지정


App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Oracle.DataAccess" culture="neutral" publicKeyToken="89b483f429c47342"/>
        <codeBase version="2.112.1.0" href="FILE://C:/MyProgram/Oracle.DataAccess.dll"/>
        <publisherPolicy apply="no"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

컴파일하면 실행파일명.exe.config가 생기는데 이걸 실행파일과 같은 위치에 같이 배포하면 됨.




[참고]

https://support.microsoft.com/en-us/kb/837908

https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx#standard_search_order_for_desktop_applications