為什麼GAC和VS引用的程序集不一致?
我們知道VS開發中引用的程序集和運行時的程序集來源於不同的地方,前者來源於%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETFramework\v{version},後者則來源於GAC。這可以從VS的添加引用對話框看出來。照理說兩者應該一直才對,但是你是否發現了它們之間存在著差異嗎?
這個問題是我昨天研究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並不具有這兩屬性。
那麼唯一的解釋是VS引用的System.Web.dll中的該類型並不包含這兩個屬性,為此我通過Reflector從%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0中加載了該程序集。
其RouteCollection屬性確實不包括上述的兩個屬性。
然後我又從GAC中加載了System.Web.dll程序集。
這裏定義的RouteCollection是具有上述的兩個屬性的:
作者:蔣金楠
微信公眾賬號:大內老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
微信公眾賬號:大內老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
最後更新:2017-10-26 12:04:20