閱讀897 返回首頁    go 阿裏雲 go 技術社區[雲棲]


為什麼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


作者:蔣金楠
微信公眾賬號:大內老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接

最後更新:2017-10-26 12:04:20

  上一篇:go  在ASP.NET MVC中使用“RadioButtonList”和“CheckBoxList”
  下一篇:go  ASP.NET的路由係統:URL與物理文件的分離