我是新手使用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事件将发生在我可以说我想要加载的地方:
引用的程序集具有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包现在处理这个问题.但是当我们想要使用它时它不可用.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。