在項(xiàng)目的配置文件Web.config中,會(huì)看到<runtime>節(jié)點(diǎn),以及包含在其中的<assemblyBinding>節(jié)點(diǎn),這顯然與程序集有關(guān),這些節(jié)點(diǎn)到底何時(shí)被用到呢?
在默認(rèn)情況下,在運(yùn)行時(shí),JIT編譯器將IL代碼編譯成本地代碼時(shí),會(huì)查看IL代碼中的字段、局部變量、方法參數(shù)等引用了哪些類(lèi)型,然后借助程序集的TypeRef和AssemblyRef元數(shù)據(jù),內(nèi)部使用System.Reflection.Assembly的Load方法來(lái)確定需要被加載的程序集,包括module。
Load方法接收一個(gè)代表強(qiáng)類(lèi)型名稱(chēng)程序集的字符串,類(lèi)似如下:
Assembly a = Assembly.Load("somename, Version=1.2.3.4" +"Culture=neutral, PublicKeyToken=........");a.CreateInstance("someclassname");
在Load方法內(nèi)部,會(huì)使用一個(gè)叫做"程序集解析(assembly resolver)"的機(jī)制尋找程序集。首先會(huì)遵循"版本策略"去尋找程序集合適的版本。這個(gè)"版本策略"可以在配置文件中配置。在"C:/Windows/Microsoft.NET/Framework/v4.0.30319/Config/machine.config"中完成計(jì)算機(jī)級(jí)別的配置,在當(dāng)前項(xiàng)目的Web.config中完成應(yīng)用程序級(jí)別的配置。例如在Web.config中:
<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="1.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><dependentAssembly><assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" /><bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /></dependentAssembly><dependentAssembly><assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" /></dependentAssembly></assemblyBinding></runtime>
如果想取消"版本策略",可以在Web.config中按如下配置:
<runtime><rt:assemblyBinding><rt:publisherPolicy apply="no" /><PRe style="font-size: 11px; font-
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注