2008-12-17 74 views
18

我有一个CommonUtils库我已经内置到一个dll中,我从几个我的项目中引用文件。 CommonUtils依赖于在建立CommonUtils.dll时设置为文件引用的log4net.dll和copy-local = true。 log4net.dll和CommonUtils.dll不在GAC中。引用的依赖关系不复制到输出目录

在MyWorkingProject中一切正常,我只有CommonUtils.dll文件引用 - log4net.dll显示在输出目录中(因为它是CommonUtils.dll的依赖项,但未从MyWorkingProject引用)。 但是,如果我创建一个新的项目添加一些unittests:MyWorkingProjectTest和项目引用MyWorkingProject,然后文件引用CommonUtils.dll再次在这里(我想使用一些CommonUtils)然后建立log4net.dll这是一个依赖于项目引用和文件引用中也不会复制到输出目录。

任何人都可以澄清这里发生了什么?编译器不知道应该抓取哪个log4net.dll文件?有什么我在这里做错了吗?我应该以其他方式执行此操作以使log4net.dll明确复制吗? 是否有任何意义,我必须明确引用log4net呢?

回答

1

我相信如果您不在项目中添加log4net作为参考,它将不会被复制。

+0

如何将log4net添加为项目引用,因为我只有分布式二进制dll。此外,为什么我必须添加一个引用,因为它只是我的一个引用的依赖关系。有人说你不应该在代码中引用你没有明确使用的库。 – Fadeproof 2008-12-18 09:26:00

+0

我的意思不是在项目中作为“项目参考”而是“参考”。 – user7116 2008-12-18 18:27:21

0

当我以前遇到类似的情况时,我收到了Visual Studio中的一个编译器警告,告诉我需要添加对从属库的引用。

编译时是否收到这样的警告?如果是这样,请遵循它提供的建议,并且应该将Log4net复制到您的输出目录。

+0

问题是我有两个引用对log4net有依赖关系,并且似乎有一些内建的东西让Visual Studio不复制冲突的依赖关系(尽管它是相同的)。如果我只引用1,但一切都按预期工作,但如果我引用两者,则不会复制。 ? – Fadeproof 2008-12-18 09:23:58

2

这是设计。您需要考虑引用的自动继承会导致的含义。虽然您可以逻辑地查看引用应该是什么,但编译器没有这样的描述。理论上讲,如果它走遍了整个依赖树,你最终可能会复制框架和操作系统的很大一部分。

这绝对是一种痛苦,我同意并理解你的挫败感,但我认为微软无法找到合适的方法来做到这一点。