C# Assembly Binding
증상 : 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