首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于dll继承的问题

关于dll继承的问题
EN

Stack Overflow用户
提问于 2010-04-22 08:34:10
回答 3查看 537关注 0票数 1

我已经创建了一个将由多个应用程序使用的dll,并且已经创建了一个安装程序包来将其安装到程序文件中,并将其添加到全局程序集缓存中。

因此,当安装程序运行时,以下文件将被复制到程序文件中的安装目录中:我开发的主dll - Log4Net.dll - Log4Net.xml文件

我现在遇到了一个问题。我已经创建了一个用于实验的测试控制台应用程序。我已经添加了我的dll作为引用,并将'local copy‘标志设置为false。

但是,当我编译测试控制台exe时,我注意到它已经将log4net.dll和log4net.xml文件复制到了bin目录。在运行测试控制台时,似乎只有当log4net.dll与exe位于同一目录中时,它才能工作。这说明测试控制台应用程序不使用log4net,只有作为引用添加的dll使用。

有没有办法使所使用的log4net.dll和xml文件成为安装到程序文件中的文件,而不是复制本地副本所需的任何应用程序?将使用我的动态链接库的应用程序将不会使用log4net,只有它们引用的动态链接库使用它。

非常感谢

EN

回答 3

Stack Overflow用户

发布于 2010-04-22 08:47:12

  1. 不要安装到全局程序集缓存中!即使您的库dll被多个应用程序使用,每个应用程序也应该有自己的本地副本。否则,您将陷入节省几KB磁盘空间的痛苦之中。
  2. 总是将所需的dlls复制到本地。如果您确实确定应用程序不需要它,您可以稍后删除不必要的dll,或者不将它们包含在安装程序中。但是,如果您的应用程序将在那里调用任何引用,它将在运行时崩溃。所以最好的选择是把它们留在那里(毕竟它们被引用是有原因的)。
  3. 不,让.Net从磁盘上的任意位置加载all是不可能的(至少在没有很多efford的情况下是如此)。它应该是这样的(如果你想知道为什么,请查阅DLL-见鬼去吧)。
票数 2
EN

Stack Overflow用户

发布于 2010-04-22 08:47:26

我怀疑你的问题在于配置。如果希望它在GAC中工作,则必须使用完全限定名称。根据http://logging.apache.org/log4net/release/faq.html上的文档

“从GAC加载程序集时,必须指定完全限定的程序集名称,包括版本、区域性和公钥。这是System.Type.GetType支持的标准语法。有关如何获取程序集的版本和公钥的信息,请参阅下一个常见问题解答。”

票数 0
EN

Stack Overflow用户

发布于 2010-04-22 10:55:40

我设法通过将Log4net.dll添加到GAC来解决这个问题。它现在将运行,而不需要dll的本地副本。

但是,它确实需要XML文件的本地副本才能正确记录日志。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2687491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档