Come faccio a reindirizzare l’associazione di assembly per la versione corrente o superiore?

Anche se i miei riferimenti sono Specific Version set di false, io sono sempre per l’associazione di assembly errori, perché il computer di destinazione ha una versione superiore. Come faccio a specificare la versione corrente o superiore per evitare l’errore seguente quando alcuni computer di destinazione potrebbe avere la versione 1.61.0.0 mentre altri hanno 1.62.0.0 o superiore?

System.IO.FileLoadException: Could not load file or assembly 'ServerInterface.NET, Version=1.61.0.0, Culture=neutral, PublicKeyToken=151ae431f239ddf0' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'ServerInterface.NET, Version=1.61.0.0, Culture=neutral, PublicKeyToken=151ae431f239ddf0'

OriginaleL’autore flipdoubt | 2015-07-06

2 Replies
  1. 12

    È necessario aggiungere un Web.config /App.chiave di configurazione per un’associazione di reindirizzamento come (si prega di cambiare le versioni di cosa hai veramente bisogno):

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="ServerInterface.NET" publicKeyToken="151ae431f239ddf0" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>

    Il oldVersion attributo imposta la gamma di versioni per il reindirizzamento. Il newVersion insiemi di attributi, l’esatta versione che dovrebbe reindirizzare.

    Se si utilizza NuGet è possibile farlo automaticamente attraverso Add-BindingRedirect. Ecco un articolo che lo spiega

    Vedi qui per più informazioni su associazione reindirizza in generale.

    Ma non so la versione esatta voglio che mi desidera reindirizzare. La versione attuale è 1.61.0.0, ma alcuni clienti potrebbero avere 1.62.0.0 mentre altri potrebbero aver 1.63.0.0 ma quelli più anziani potrebbe ancora utilizzare il 1.61.0.0 distribuito con la mia app.
    Guardando il documenti sembra che per essere più espliciti nell’assemblea che si carica con newVersion Maggiori dettagli qui. Si potrebbe trasformare il file di configurazione basata sul client?

    OriginaleL’autore Luke Merrett

  2. 2

    Rinviare l’associazione in codice mi permette di utilizzare qualsiasi versione. Si sarebbe probabilmente vuole fare più il controllo di questo reindirizza tutti i tentativi falliti di ogni assemblea con lo stesso nome.

    public static void Main()
    {
        AppDomain.CurrentDomain.AssemblyResolve += _HandleAssemblyResolve;
    }
    
    private Assembly _HandleAssemblyResolve(object sender, ResolveEventArgs args)
    {
        var firstOrDefault = args.Name.Split(',').FirstOrDefault();
        return Assembly.Load(firstOrDefault);
    }
    Si potrebbe usare questo: var assemblyFromTxt = new AssemblyName(args.Nome); return Assemblea.Carico(assemblyFromTxt.Nome);
    Questo è pericoloso. Se non è possibile caricare un gruppo, creare uno stack overflow. Può anche causare autofac smettere di produrre la registrazione degli errori perché non in grado di leggere le necessarie risorse. Probabilmente, può causare più problemi, anche.

    OriginaleL’autore flipdoubt

Lascia un commento