我可以以引用“本地”程序集(而不是在 Visual Studio 中的方式)的方式(Visual Studio 中的设置)配置 .NET 应用程序吗?GAC http://en.wikipedia.org/wiki/Global_Assembly_Cache)而不是 GAC 内的程序集,尽管两个程序集具有相同的名称和相同的版本?
如果两个程序集都是强命名(签名)的,则 CLR 将始终从 GAC 加载。
以下是运行时用于解析程序集引用的步骤(来自运行时如何定位程序集 http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx):
通过检查适用的程序集来确定正确的程序集版本
配置文件,包括
应用程序配置文件,
发布者策略文件和机器
配置文件。如果
配置文件位于
远程机器,运行时必须
找到并下载该应用程序
先配置文件。
检查程序集名称之前是否已绑定,如果是,
使用之前加载的程序集。
如果先前请求加载
组装失败,请求失败
立即而不尝试加载
大会。
检查全局程序集缓存。如果在那里找到该程序集,则
运行时使用此程序集。
用于装配的探针(...省略了一些材料...)
正如同一篇文章后面所述:
对于没有强名称的程序集没有版本检查,运行时也没有
检查全局程序集缓存中是否有没有强名称的程序集。
因此,如果您有能力从本地程序集中删除签名,应用程序将使用它而不是 GAC 中的签名。
有关运行时绑定机制的更多详细信息,请参阅苏珊娜·库克的博客 http://blogs.msdn.com/suzcook/archive/2003/09/19/57248.aspx.
斯科特·汉塞尔曼 (Scott Hanselman) 的这篇博客文章 http://www.hanselman.com/blog/FusionLoaderContextsUnableToCastObjectOfTypeWhateverToTypeWhatever.aspx还提供了绑定过程的详细概述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)