首页 / C# / c# – 何时使用GAC?
c# – 何时使用GAC?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 何时使用GAC?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1628字,纯文字阅读大概需要3分钟。
内容图文
![c# – 何时使用GAC?](/upload/InfoBanner/zyjiaocheng/772/1babf1b55f814669aba487cc01fb625a.jpg)
我是新手使用GAC,我正在尝试处理你应该和不应该使用它的时间.这是我的情况:
我开发的软件主要是另一个商业产品的插件,以便产品将我的产品加载到它的代码中.我开发了几个由我的所有应用程序(例如我的许可证模块)使用的程序集.这些库的.dll文件安装到主应用程序目录,以便父程序从那里加载它们.
问题是当用户安装了两个软件标题时,可能会发生冲突,因为父程序只加载它找到的程序集的第一个副本,而不管版本如何.因此,如果他们的软件A版本1.0中包含License1.0.dll,而软件B版本2.5中包含许可证2.0,其中包含与License1.0.dll不同的方法和/或参数,则它只加载1.0然后抛出异常软件B因为找不到合适的许可方法.
在最初的研究中,似乎GAC的目的是为了解决这个问题,而且有几个网站似乎都是这样,但后来我也找到了this subject,而答案中的链接似乎是说不会不使用GAC.
我糊涂了.有人可以直接指导我是否应该考虑使用GAC吗?
解决方法:
我完全不建议使用GAC,因为你依赖注册的dll而且我经常遇到问题.无论如何,您可以手动加载您喜欢的程序集.我有一个64位或32位的父应用程序,我必须加载相应的SQLite x64或x86 DLL.
引用的程序集具有copy local false.这是运行时寻找解析引用的第一个地方.如果有什么,那么它会检查GAC. dll没有在那里注册,所以AssemblyResolve事件将发生在我可以说我想要加载的地方:
AppDomain.CurrentDomain.AssemblyResolve += ResoveAssembly;
private static Assembly ResoveAssembly(object sender, ResolveEventArgs e)
{
string fullPath = Assembly.GetExecutingAssembly().Location;
string path = Path.GetDirectoryName(fullPath);
if (e.Name.StartsWith("System.Data.SQLite"))
{
return Assembly.LoadFrom(Path.Combine(path, Environment.Is64BitProcess
? "x64\\System.Data.SQLite.DLL"
: "x86\\System.Data.SQLite.DLL"));}
return null;
}
}
万一有人想知道为什么我这样做:据我所知,新的SQLite NuGet包现在处理这个问题.但是当我们想要使用它时它不可用.
内容总结
以上是互联网集市为您收集整理的c# – 何时使用GAC?全部内容,希望文章能够帮你解决c# – 何时使用GAC?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。