18

我有一个 CommonUtils 库,我已经内置到一个 dll 中,我从我的几个项目中引用了它。CommonUtils 依赖于在构建 CommonUtils.dll 时设置为文件引用和 copy-local=true 的 log4net.dll。log4net.dll 和 CommonUtils.dll 不在 GAC 中。

在 MyWorkingProject 中一切正常,我只有一个对 CommonUtils.dll 的文件引用 - log4net.dll 显示在输出目录中(因为它是 CommonUtils.dll 的依赖项,但未从 MyWorkingProject 引用)。但是,如果我创建一个新项目来添加一些单元测试:MyWorkingProjectTest 和项目引用 MyWorkingProject,然后在此处再次文件引用 CommonUtils.dll(我想使用一些 CommonUtils)然后在构建 log4net.dll 时,它是两个项目的依赖项参考和文件参考也不会被复制到输出目录。

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

4

3 回答 3

2

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

这绝对是一种痛苦,我同意并理解你的沮丧,但我认为微软无法找到一种合乎逻辑的方式来做到这一点。

于 2008-12-18T18:42:55.910 回答
1

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

于 2008-12-17T15:51:34.493 回答
0

当我过去遇到类似情况时,我在 Visual Studio 中收到编译器警告,告诉我需要添加对依赖库的引用。

你编译的时候有收到这样的警告吗?如果是这样,请遵循它给出的建议,您应该会发现 Log4net 已复制到您的输出目录。

于 2008-12-18T00:21:14.573 回答