将间接引用的程序集复制到输出目录 - 程序集丢失[重复]

2024-04-17

可能的重复:
本地复制如何工作? https://stackoverflow.com/questions/320295/how-does-copy-local-work

我有以下情况:

  • 有一个名为 OLAF.Tools 的项目,该项目引用 C:\Program Files\SQLXML 4.0\bin\Microsoft.Data.SqlXml.dll 中的 Microsoft.Data.SqlXml。参考复制本地属性设置为 True。当我在 bin 目录中构建该项目时,我可以看到 OLAF.Tools.dll 和 Microsoft.Data.SqlXml.dll
  • 有一个名为 OLAF.Generator 的控制台应用程序,该应用程序引用 OLAF.Tools(我已使用“项目”选项卡添加了引用)。当我在 bin 目录中构建该应用程序时,我只能看到 OLAF.Generator.exe 和 OLAF.Tools.dll - 没有 Microsoft.Data.SqlXml.dll,这让我感到惊讶。另一个奇怪的事情是,即使缺少该 dll,应用程序也能正常执行。

所以我的问题是:

  • 为什么 Microsoft.Data.SqlXml.dll 没有复制到 OLAF.Generator 控制台应用程序的 bin 文件夹中?
  • 应用程序如何解析可以找到 Microsoft.Data.SqlXml.dll 的目录?

谢谢,帕维尔

编辑1:(回应后马克·格拉维尔)

@马克·格拉维尔:你的回答给了我深思,因为我可以发誓我总是可以在主应用程序的 bin 目录中看到间接依赖的程序集。恕我直言,我不同意你的观点——恕我直言:)

当然,引用在物理上并不是级联的(我们谈论的是与类、接口等的紧密关系)——这正是我在构建 OLAF.Tools 库时想要实现的目标。该库提供了一个抽象级别,它包含工厂,一个工厂接受参数字符串并返回接口。该接口的一种特定实现使用 Microsoft.Data.SqlXml 组件。因此, OLAF.Generator 使用位于 OLAF.Tools 中的接口,但不了解 Microsoft.Data.SqlXml 中的组件。

除此之外(我想我们都知道我在前一段中试图解释的内容),在构建应用程序时,应该复制依赖程序集(如果 Copy Local 设置为 TRUE)。我刚刚编写了示例应用程序,项目 B lib 引用了项目 A lib,项目 C(控制台应用程序)引用了项目 B。在项目 C 的 bin 目录中,我可以看到所有内容:项目 A.dll、项目 B.dll 和项​​目C.exe。因此,在讨论的场景中,Microsoft.Data.SqlXml 没有最终出现在 OLAF.Generator bin 文件夹中的原因与该程序集本身有关。

编译器/Visual Studio 是否知道 Microsoft.Data.SqlXml 位于自动探测的目录中(或者位于 GAC 中),这就是不复制该程序集的原因?

编辑2:我刚刚检查了GAC,确实,Microsoft.Data.SqlXml.dll 安装在GAC 中。


本地复制如何工作? log4net.dll 未复制到 MyProject 输出目录 https://stackoverflow.com/questions/320295/how-does-copy-local-work- 这是我问题的答案。当库安装在 GAC 中时,即使使用 COPY LOCAL 设置,也不会复制它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将间接引用的程序集复制到输出目录 - 程序集丢失[重复] 的相关文章

随机推荐