我可以用一种方式(Visual Studio中的设置)来配置.NET应用程序:它引用“本地”程序集(而不是在GAC)而不是GAC中的程序集,尽管两个程序集具有相同的名称和相同的版本?如何防止.NET应用程序从GAC加载/引用程序集?
回答
如果两个程序集都是强命名的(签名),CLR将始终从GAC加载。
下面是运行时用来解析程序集引用(从How the Runtime Locates Assemblies)步骤:
通过检查适用 配置文件,包括 应用程序配置文件, 发行商确定正确的程序集版本策略文件和机器 配置文件。如果 配置文件位于 远程计算机上,则运行时必须首先定位并下载应用程序 配置文件 。
检查程序集名称是否已被绑定到之前,如果是, 使用先前加载的程序集。 如果先前加载 组件的请求失败,请求将立即失败 而不会尝试加载 程序集。
检查全局程序集缓存。如果在那里找到程序集,则 运行时使用此程序集。
探头的组件(...一些材料省略......)
正如在同一篇文章后说:
没有版本检测组件没有强名称,运行时 也没有在全局程序集缓存中检入没有强名称的程序集。
因此,如果您有能力从本地程序集中删除签名,那么应用程序将使用它而不是GAC中的签名。
有关运行时绑定机制的更多细节,请参阅Suzanne Cook's blog。
This blog entry from Scott Hanselman也提供了一个很好的绑定过程的概述。
您是否看到此问题?
Forcing the ASP.NET Application to load the assembly from bin not from GAC
这听起来像你正在尝试做同样的事情。
要成功部署您的.NET Framework应用程序,您必须了解公共语言运行库如何定位并绑定到组成应用程序的程序集。默认情况下,运行时尝试与构建应用程序的程序集的确切版本绑定。该默认行为可以被配置文件设置覆盖。
您可以使用Windows软件开发工具包(SDK)中包含的程序集绑定日志查看器(Fuslogvw.exe)查看日志文件中的绑定信息。
小号
如果你可以改变本地的dll的版本号,您可以使用使用oldVersion属性的DLL版本重定向。您可以为当地组装使用强名称: 请看看这个页面: http://msdn.microsoft.com/en-us/library/7wd6ex19.aspx
你也应该考虑,这是可以修改编译的程序集的版本号喜欢在这里描述: Change Assembly Version in a compiled .NET assembly
- 1. 如何从GAC中引用程序集?
- 2. C#:如何从GAC加载程序集?
- 3. 我如何从GAC加载程序集?
- 4. 如何引用GAC中的程序集
- 5. 如何在GAC中引用程序集
- 6. 如何引用GAC中的程序集?
- 7. WCF服务无法从GAC中加载引用程序集
- 8. 如何重新加载.NET应用程序域的程序集?
- 9. 从VS2010引用GAC中的.Net 4.0程序集
- 10. 如何从纯C应用程序重用.Net程序集
- 11. GAC - 程序集在GAC中,但“无法加载文件或程序集”
- 12. 如何防止程序加载两次?
- 13. 从gac载入dll阻止应用程序
- 14. .net 1.1应用程序如何使用.net 2.0程序集
- 15. 如何防止多次加载Android应用程序?
- 16. 如何防止Hyperledger Composer应用程序加载Bootstrap?
- 17. 如何防止mod_wsgi django应用程序反复重新加载?
- 18. 防止卸载的应用程序
- 19. 如何使用GAC中的程序集?
- 20. 如何从Web应用程序加载iPhone应用程序
- 21. 如果不在GAC中,如何从另一个应用程序的bin目录使用.net程序集?
- 22. .NET程序集加载
- 23. 从Inno Setup向GAC添加程序集
- 24. 如何预加载.net程序集
- 25. 如何防止我的应用程序
- 26. 在.Net应用程序中引用程序集
- 27. 从.NET引用Silverlight程序集
- 28. 从“沙盒环境”中的.Net应用程序加载程序集
- 29. 如何防止从我的应用程序启动其他应用程序
- 30. 如何将.NET程序集添加到InnoSetup中的GAC中?
哦,我没有找到这个答案,当我搜索StackOverFlow这个主题。但是你是对的,最后问题几乎是一样的。 – Flo 2009-10-22 14:17:28