為什么GAC和VS引用的程序集不一致?


我們知道VS開發中引用的程序集和運行時的程序集來源於不同的地方,前者來源於%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETFramework\v{version},后者則來源於GAC。這可以從VS的添加引用對話框看出來。照理說兩者應該一直才對,但是你是否發現了它們之間存在着差異嗎?

image

這個問題是我昨天研究ASP.NET的路由系統時發現的,表示路由對象集合的RouteCollection原本如下兩個屬性AppendTrailingSlash 和LowercaseUrls,表示在對生成能夠的URL進行規范化時是否需要添加一個額外的“/”字符(如果不存在)以及是否需要將URL轉化成小寫。

   1: public class RouteCollection : Collection<RouteBase>
   2: {    
   3:     //其他成員         
   4:     public bool AppendTrailingSlash {  get;  set; }
   5:     public bool LowercaseUrls {  get;  set; }  
   6: }

但是當我試圖在代碼中使用這兩個屬性的時候,卻發生變異錯誤,提示RouteCollection並不具有這兩屬性。

image

那么唯一的解釋是VS引用的System.Web.dll中的該類型並不包含這兩個屬性,為此我通過Reflector從%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0中加載了該程序集。

image

其RouteCollection屬性確實不包括上述的兩個屬性。

image

然后我又從GAC中加載了System.Web.dll程序集。

image

這里定義的RouteCollection是具有上述的兩個屬性的:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM