为什么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是具有上述的两个属性的:
分类:
[02] 编程技巧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
2011-03-17 谈谈Nullable<T>的类型转换问题
2011-03-17 [转] Leaving patterns & practices
2010-03-17 WCF技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[上篇]