Loading [MathJax]/extensions/tex2jax.js

VB.NET:ODP.NETのエラー


環境

Windows 10 21H2 (19044.1288)
Oracle 12.2.0.1.0 x64

VB.NETでのODP.NETのエラー

Visual Basic .NET + OracleDataAccess を使ったアプリケーションを実行したところ、以下のエラーで起動できない。
1
2
3
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Oracle.DataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
ファイル名 'Oracle.DataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342' です。'Oracle.DataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342' ---> System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
ファイル名 'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342' です。'Oracle.DataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342'
WindowsにインストールしているODPのバージョンは 4.122.1.0 なので、起動したプログラムのexe.configファイルに以下を記述する。
1
2
3
4
5
6
7
8
9
10
11
12
13
  <configuration>
    <runtime>
      <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <!-- Oracle.DataAccessのバインドリダイレクト設定 -->
        <dependentassembly>
          <assemblyidentity name="Oracle.DataAccess" publickeytoken="89b483f429c47342" culture="neutral">
          <!-- 使用可能なバージョン範囲を指定 -->
          <bindingredirect oldversion="4.122.19.1" newversion="4.122.1.0">
        </bindingredirect></assemblyidentity></dependentassembly>
      </assemblybinding>
    </runtime>   
    
</configuration>
現象変わらないので、oldVersionの範囲を広げてみた。
1
2
3
4
5
6
7
8
9
10
<runtime>
  <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Oracle.DataAccessのバインドリダイレクト設定 -->
    <dependentassembly>
      <assemblyidentity name="Oracle.DataAccess" publickeytoken="89b483f429c47342" culture="neutral">
      <!-- 使用可能なバージョン範囲を指定 -->
      <bindingredirect oldversion="0.0.0.0-4.999.999.999" newversion="4.122.1.0">
    </bindingredirect></assemblyidentity></dependentassembly>
  </assemblybinding>
</runtime>
だめ・・・
fuslogvw.exeで調べたところ、怪しいログを見つけた。
1
2
3
4
5
ログ: ホスト構成ファイル  を使用します。
ログ: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config からのコンピューター構成ファイルを使用します。
ログ: アプリケーション構成ファイルにリダイレクトが見つかりました。4.121.2.0 は 4.122.1.0 にリダイレクトされました。
ログ: 公開元ポリシー ファイルが C:\Windows\Microsoft.Net\assembly\GAC_64\Policy.4.122.Oracle.DataAccess\v4.0_4.122.19.1__89b483f429c47342\Policy.4.122.Oracle.DataAccess.config で見つかりました。
ログ: 公開元ポリシー ファイル リダイレクトが見つかりました。4.122.1.0 は 4.122.19.1 にリダイレクトされました。
ログに記載されていたファイルの内容を確認すると、確かに4.112.19.1へリダイレクトするようになっている。
C:\Windows\Microsoft.NET\assembly\GAC_64\Policy.4.122.Oracle.DataAccess\v4.0_4.122.19.1__89b483f429c47342\Policy.4.122.Oracle.DataAccess.config
    
      
         
           
             
               
           
         
      
   
  
このファイルの編集は管理者権限が必要なので、エディタ(自分の場合はサクラエディタ)を管理者権限で実行したのち、とりあえず configuration のみ残してそれ以外は削除した。

治ったかも。
ということは、最初のexe.configは設定不要で、単にPolicy.4.122.Oracle.DataAccess.configに変なのが設定されていたのが原因。


Visual Basic .NET Oracle

0 件のコメント:

その他の記事