私のアプリケーションが参照されたバージョンではなく最新のGACバージョンを常に使用するのはなぜですか?
-
13-12-2019 - |
質問
文脈
GAC、バージョン1.0およびバージョン2.0にインストールされているアセンブリの2つの異なるバージョンがあります。特定のバージョンとして1.0を参照しているアプリケーションを作成しました。
発行
アプリケーションを実行すると、常にバージョン2.0がロードされますが、アプリケーションはバージョン1.0を具体的に参照しています。
質問
これはなぜ起こっているのですか? アプリケーションがコンパイルされたバージョンをロードするようにするにはどうすればいいですか?
これは、私のアプリケーションがそれを構築したときにバージョン2.0を認識していなかったので、バインディングリダイレクトと関係があること、および参照 "Specific Version"メタデータがtrueに設定されていたので、私のようには見えません。
ありがとう。
編集:
アセンブリIM参照は、実際にはODACパッケージからのOracle.DataAccessです。 GACで公開されている場合、Policy.x.xxx.oracle.DataAccessという名前の他のアセンブリが注目に値します。
編集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つを破ったのですが、ポリシーを無効にすることは私の場合でやるべきことです。
最終編集:
igorは私に正しい答えを与えました。これらのポリシーを回避するためにしなければならなかったすべてのポリシーは、右設定セクションのpublisherPolicy
設定を使用することでした。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<publisherPolicy apply="no"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
. 解決
質問を編集したら、これが組み立てバインディングに影響を与えるポリシーファイルであることが明らかになります。
Oracleの場合、policy.x.y.oracle.dataaccess.configと呼ばれるファイルがあります。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
<bindingRedirect oldVersion="10.1.0.000-10.2.0.100" newVersion="10.2.0.100"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
.
ポリシーは、Oracleインストーラによってインストールされ、OracleがLibraryが下位互換性があると考えているため、Oracle.DataAccess.dll
を最新バージョンにリダイレクトします。
編集:発行者ポリシーを特定のアセンブリに適用するを適用したくない場合は、要素に要素を入力します。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly" publicKeyToken="..." culture="en-us" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
.