環境
GAC にバージョン 1.0 とバージョン 2.0 の 2 つの異なるバージョンのアセンブリがインストールされています。特定のバージョンとして 1.0 を参照しているアプリケーションを作成しました。
問題
アプリケーションを実行すると、常にバージョン 2.0 がロードされますが、アプリケーションは特にバージョン 1.0 を参照しています。
質問
なぜこうなった?アプリケーションがコンパイルされたバージョンを強制的にロードするにはどうすればよいですか?
私のアプリケーションはビルド時にバージョン 2.0 を認識しておらず、参照「特定のバージョン」メタデータが true に設定されているため、これがバインディング リダイレクトと関係があるとは思えません。
ありがとう。
編集:
私が参照しているアセンブリは、実際には ODAC パッケージの Oracle.DataAccess です。Policy.x.xxx.Oracle.DataAccess という名前の他のアセンブリが GAC で公開されていることに気付きました。
編集2:
Oracle.DataAccess ポリシーを調べたところ、バインディング リダイレクトを定義する構成が見つかりました。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="4.112.0.0-4.112.3.0" newVersion="4.112.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
アプリケーション構成にリバース バインディング リダイレクトを追加しましたが、GAC のポリシーが優先されているようです。この件を扱い、この構成でポリシーを無視することを提案しているMSDN の記事を見つけました。
<publisherPolicy apply="no" />
しかし、それでもうまくいきません...
編集3:
GAC からポリシーを削除しようとして、マシンを再起動しました。それはついに働いた。快適なソリューション開発のようには感じられませんが、このポリシーは私のアプリケーションの 1 つを壊しました。つまり、私の場合はポリシーを無効にすることが正しいことです。
最終編集:
イゴールは私に正しい答えをくれました。これらのポリシーを回避するために私がしなければならなかったpublisherPolicy
のは、正しい構成セクションの設定を使用することだけでした:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>