关于dll继承的问题

时间:2010-04-22 00:34:10

标签: c# inheritance dll

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

dll本身使用log4net,并且需要一个xml文件来记录日志。

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

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

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

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

非常感谢

3 个答案:

答案 0 :(得分:2)

  1. 不要安装到全局程序集缓存中!即使您的库dll被多个应用程序使用,每个应用程序都应拥有自己的本地副本。否则,你会因为节省几KB的磁盘空间而陷入痛苦之中。
  2. 始终在本地复制所需的dll。如果您确定应用程序不需要它,您可以稍后删除不合格的dll,或者不要将它们包含在安装程序中。但是,如果您的应用程序将调用任何引用,它将在运行时崩溃。所以最好的选择是将它们留在那里(毕竟它们被引用是有原因的。)
  3. 不,从磁盘上的任意位置获取.Net加载dll是不可能的(至少不是没有多少efford)。它应该是这样的(如果你想知道原因,请查看DLL-hell。)

答案 1 :(得分:0)

我怀疑你的问题是配置。如果您希望从GAC使用,则必须使用完全限定名称。根据{{​​3}}的文档:

  

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

答案 2 :(得分:0)

我设法通过将Log4net.dll添加到GAC来解决此问题。现在它将运行而无需本地副本dll。

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