DLL 引用未复制到项目 bin

Posted

技术标签:

【中文标题】DLL 引用未复制到项目 bin【英文标题】:DLL reference not copying into project bin 【发布时间】:2014-06-26 01:14:55 【问题描述】:

项目 A 引用 项目 B项目 B 引用外部 DDL(使用 NuGet 恢复)。 DLL 应该被复制到 Project A 的 bin 文件夹中(连同 Project B 的 DLL):

就我而言,在运行 Project A 时,我收到以下异常:

无法加载文件或程序集 'PostSharp, Version=3.2.18.0, Culture=neutral, PublicKeyToken=b13fd38b8f9c99d7' 或其之一 依赖关系。系统找不到指定的文件。

DLL 没有被复制到 Project A 的 bin 中。 Project B 的所有其他外部引用都可以很好地复制,这让我感到困惑。

Copy Local 对于所有涉及的引用都设置为 true。示例:

我该怎么做?

注意:使用 Visual Studio 2013。

【问题讨论】:

Msbuild doesn't copy references (dlls) if using project dependencies in solution 的可能重复项 其实更好的答案是***.com/questions/1043913/… 我认为这是一个很好的问题的例子:) 【参考方案1】:

我发现的选项是:

在项目 A 中添加对 PostSharp 的引用。 在项目 B 中添加虚拟代码,以便编译器检测到引用正在被使用。 添加构建事件以强制复制 DLL。

我不喜欢上述任何解决方案。在我看来,它们是 hack,从长远来看只会导致更难以维护的解决方案。

我已经通过使用一个通用的输出目录解决了这个问题。这似乎是许多人推荐的解决方案。我也经历了更快的构建时间。见this *** post。

【讨论】:

我还发现 dll 需要使用相同版本的 .net 框架 在我的例子中,一个项目使用了客户端配置文件而不是完整版的 .net 框架 4。更改为完整版解决了这个问题。【参考方案2】:

当我遇到这个问题时,是因为我更改了一个项目的名称,但没有更改程序集名称 - 它与解决方案中另一个项目的程序集名称相同。

【讨论】:

【参考方案3】:

我在项目 B 上添加了一些虚拟(未使用)代码,引用了所需的 DLL。

因此,编译器会猜测它必须将 DLL 复制到项目 A 的输出中。

【讨论】:

以上是关于DLL 引用未复制到项目 bin的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 发布未将所有 DLL 复制到发布文件夹

未复制到输出目录的引用的依赖关系

从属 DLL 未复制到 Visual Studio 中的生成输出文件夹

Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹

在发布时强制将外部文件复制到 bin 文件夹

引用的 DLL 未复制