2013-02-24 4 views
41

ho notato questa sezione nei miei file web.config per un po 'e ora sto cercando di ragionare che cosa esattamente lo scopo è:Qual è il significato/motivo per le voci generate in web.config> configuration> runtime> assemblyBinding?

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 

Quindi, la prima voce sembra dire:

System.Web.Helpers è il nome di un assieme dipendente con un token di chiave pubblica di 31bf3856ad364e35. Redirect versione 1.0.0.0 tramite 2.0.0.0 alla versione 2.0.0.0.

La mia ipotesi migliore è che si intende qualsiasi codice in esecuzione nel contesto della fase di esecuzione ASP.NET che dipende da un assembly con il nome specificato, che ha anche una versione nell'intervallo specificato viene eseguito come se fosse compilato con la versione specificata con la chiave pubblica specificata.

Ciò significa che se ho un progetto Web che dipende da una libreria di classi e che la libreria di classi ha un riferimento a una versione precedente dell'assembly che ha aa bindingRedirect, che il codice verrà eseguito come se fosse compilato contro versione più nuova?

risposta

26

significa questo se ho un progetto web che dipende da una libreria di classi e che libreria di classi ha un riferimento a una versione precedente dell'assembly che ha aa bindingRedirect, che il codice verrà eseguito come se è stato compilato contro la versione più recente?

Hai bene (vorrei solo dire "... il codice verrà eseguito come se fosse riferimento alla versione più recente"), vedi http://msdn.microsoft.com/en-us/library/7wd6ex19%28v=vs.110%29.aspx

"Quando si crea un .NET Applicazione framework rispetto a una specifica versione di un assembly con nome sicuro, l'applicazione utilizza la versione dell'assembly in fase di esecuzione, tuttavia a volte è possibile che l'applicazione venga eseguita su una versione più recente di un assembly. "

+0

grazie, questa è l'informazione che speravo di ottenere. ti senti come lo capisci al punto che la tua risposta è autorevole? (per favore non prenderlo nel modo sbagliato) –

+0

@AaronAnodide: no, non credo che la mia risposta sia autorevole. Questo è solo il modo in cui comprendo la documentazione e l'ho usato qualcosa come ... 3 volte. Non preoccuparti, non mi prendo male ;-) – jbl

+2

Sì, voi ragazzi avete ragione, l'ho usato per lo stesso scopo; per esempio, dire che ho una libreria chiamata libA.dll e un'altra libreria chiamata libB.dll. La mia versione di libA.dll è compilata rispetto alla versione 1.0 di libB.dll. Ho aggiornato la mia applicazione con una versione più recente di libB.dll (ad esempio 1.5) e libA.dll non funziona più. Vorrei usare questa funzione per istruire il runtime per far sì che libA.dll funzioni con la versione più recente di libB.dll (l'altra, probabilmente l'opzione migliore è, se ho il codice sorgente di libA.dll per compilarlo contro la versione più recente di libB.dll). –

Problemi correlati