Perché la mia applicazione utilizza sempre la versione più recente GAC anziché la versione di riferimento?

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

Domanda

Context

Ho 2 diverse versioni di un assembly installato in GAC, versione 1.0 e versione 2.0. Ho fatto un'applicazione che si riferisce a 1.0 come versione specifica.

Edizione

Quando eseguo la mia applicazione, caricherà sempre la versione 2.0 mentre l'applicazione è specificamente referendando la versione 1.0.

Domanda

Perché è questo accadendo? Come posso forzare la mia applicazione per caricare la versione in cui è stato compilato?

Non mi sembra che questo abbia qualcosa a che fare con un reindirizzamento vincolante poiché la mia applicazione non era nemmeno a conoscenza della versione 2.0 quando l'ho costruito e che la "versione specifica" di riferimento è impostata su TRUE. Grazie.


.

Modifica:

L'assembly I AM Darencing è in realtà Oracle.DataAccess dal pacchetto ODAC. Ho notato che altre assemblee denominate policy.x.xxx.oracle.DataAccess dove pubblicato in GAC.


.

Modifica 2:

Dopo aver esaminato la politica Oracle.DataAccess ho trovato la configurazione che definisce il reindirizzamento vincolante:

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

Anche se ho aggiunto il reindirizzamento obbligatorio invertito nella mia configurazione dell'applicazione, la politica in GAC sembra avere la priorità. Ho trovato un MSDN Articolo trattando il soggetto e suggerire di ignorare la politica con questa configurazione: Ma ancora non funziona ...


.

Modifica 3:

Ho provato a rimuovere la politica dal GAC e riavviato la mia macchina. Finalmente ha funzionato. Non si sente come uno sviluppo confortevole della soluzione, ma questa politica ha rotto una delle mie applicazioni che significa disabilitare la politica è la cosa giusta da fare nel mio caso.


.

Modifica finale:

Igor mi ha dato la risposta giusta. Tutto quello che dovevo fare al punto di soluzione di soluzionare quelle politiche per utilizzare l'impostazione publisherPolicy nella sezione giusta configrazione:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
      <publisherPolicy apply="no"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
.

È stato utile?

Soluzione

Dopo aver modificato la tua domanda diventa chiaro che questo è il file di politica che influisce sul legame del gruppo.

In caso di Oracle c'è un file chiamato policy.x.y.oracle.dataaccess.config con i contenuti simili a questo:

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

La politica è installata da Oracle Installer e reindirizza Oracle.DataAccess.dll alla versione più recente, poiché Oracle ritiene che la Biblioteca sia compatibile.

Modifica: se non si desidera che il criterio dell'editore venga applicato per un particolare assembly , inserire l'elemento nell'elemento:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top