.net 未复制到输出目录的引用的依赖项

.net 未复制到输出目录的引用的依赖项,.net,visual-studio,reference,dependencies,.net,Visual Studio,Reference,Dependencies,我有一个CommonUtils库,我已经将它内置到一个dll中,我从几个项目中引用了它。CommonUtils依赖于log4net.dll,该log4net.dll在生成CommonUtils.dll时被设置为文件引用,并且copy local=true。log4net.dll和CommonUtils.dll不在GAC中 在MyWorkingProject中,一切正常,我只有一个对CommonUtils.dll的文件引用-输出目录中显示log4net.dll(因为它是CommonUtils.dl

我有一个CommonUtils库,我已经将它内置到一个dll中,我从几个项目中引用了它。CommonUtils依赖于log4net.dll,该log4net.dll在生成CommonUtils.dll时被设置为文件引用,并且copy local=true。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有什么意义吗?

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

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


编译时是否收到这样的警告?如果是这样,请按照它给出的建议进行操作,您应该会发现Log4net已复制到您的输出目录。

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


这无疑是一件痛苦的事情,我同意并理解您的沮丧,但我认为Microsoft无法找到一种合乎逻辑的方法来做这件事。

问题是,我有两个引用依赖于log4net,而且visual studio似乎有一些内置的东西来避免复制冲突的依赖关系(尽管是同一个)。如果我仅引用1,则一切正常工作,但如果我同时引用两者,则不会复制。?两个引用是否真正指向同一程序集?检查每个引用的属性以确保路径相同。由于我只有分布式二进制dll,您将如何将log4net添加为项目引用。为什么我必须添加对的引用因为它只是我的一个引用的依赖项。有人说你不应该引用代码中没有明确使用的库。我的意思不是作为“项目引用”,而是作为“引用”如果我的LibA和LibB都依赖于log4net,并且都位于MyProjDir/LibA和MyProjDir/LibB中,它们都包含log4net.dll。我应该引用哪个log4net.dll?log4net.dll的copy local true不是构建LibA和LibB的方法吗?我个人添加了任何共享引用引用到顶级项目。例如,如果和应用程序都将使用您的库,我会将log4net.dll直接添加到应用程序的/bin文件夹中。这不是最好的解决方案,但我发现这比查找引用更容易。“by and application”=“by a application”。此外,我说我将引用添加到顶层是骗人的。我没有添加引用-我只是添加到/bin文件夹,因为它将位于库查找它的探测路径中。好的,我明白了,所以我可以添加一个生成后任务来显式复制它,而不是使用设置为“复制”的log4net引用来生成我的公用项本地=假?