私のアプリケーションが参照されたバージョンではなく最新のGACバージョンを常に使用するのはなぜですか?

StackOverflow https://stackoverflow.com//questions/10700669

質問

文脈

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>
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top