可能是重复的问题:
如何使用Copy-local? 我有以下情况:
- 有一个名为OLAF.Tools的项目,该项目引用位于C:\Program Files\SQLXML 4.0\bin\Microsoft.Data.SqlXml.dll中的Microsoft.Data.SqlXml。 引用“Copy Local”属性设置为True。当我在bin目录中构建该项目时,我可以看到OLAF.Tools.dll和Microsoft.Data.SqlXml.dll两个文件。 - 有一个名为OLAF.Generator的控制台应用程序,该应用程序引用了OLAF.Tools(我使用Project选项卡添加了引用)。当我在bin目录中构建该应用程序时,我只能看到OLAF.Generator.exe和OLAF.Tools.dll - 没有Microsoft.Data.SqlXml.dll,这让我感到惊讶。另一件奇怪的事情是即使缺少该dll,应用程序也可以正常执行。
所以我的问题是:
- 为什么Microsoft.Data.SqlXml.dll没有复制到OLAF.Generator控制台应用程序的bin文件夹中? - 应用程序如何解析Microsoft.Data.SqlXml.dll所在的目录?
谢谢,Pawel
编辑1:(在得到Marc Gravell的回答后)
@Marc Gravell: 您的答案让我深思。我可以保证,我总能在主应用程序的bin目录中看到间接依赖的程序集。 我不同意您的看法 - 尽管我尊重您 :)
当然,引用并不会物理级联(我们正在谈论与类、接口等的强关系) - 这正是我构建OLAF.Tools库时想要实现的。 那个库提供了一层抽象,它包含了工厂,而一个工厂接受字符串作为参数并返回接口。该接口的一个特定实现使用Microsoft.Data.SqlXml组件。结果,OLAF.Generator使用位于OLAF.Tools中的接口,但不知道Microsoft.Data.SqlXml中的组件。除此之外(我想我们都知道我在上段所解释的内容),在构建应用程序时,依赖程序集应该被复制(如果“复制本地”设置为TRUE)。我刚刚写了一个示例应用程序,项目B库引用项目A库,而项目C(控制台应用程序)引用项目B。在项目C的bin目录中,我可以看到所有文件:Project A.dll、Project B.dll和Project C.exe。因此,在讨论的情况下,Microsoft.Data.SqlXml为什么没有出现在OLAF.Generator bin文件夹中与该程序集本身有关。
编译器/Visual Studio是否知道Microsoft.Data.SqlXml位于自动探测的目录(或者它在GAC中),这就是该程序集未被复制的原因?
编辑2: 我刚刚检查了GAC,确实安装了Microsoft.Data.SqlXml.dll.
如何使用Copy-local? 我有以下情况:
- 有一个名为OLAF.Tools的项目,该项目引用位于C:\Program Files\SQLXML 4.0\bin\Microsoft.Data.SqlXml.dll中的Microsoft.Data.SqlXml。 引用“Copy Local”属性设置为True。当我在bin目录中构建该项目时,我可以看到OLAF.Tools.dll和Microsoft.Data.SqlXml.dll两个文件。 - 有一个名为OLAF.Generator的控制台应用程序,该应用程序引用了OLAF.Tools(我使用Project选项卡添加了引用)。当我在bin目录中构建该应用程序时,我只能看到OLAF.Generator.exe和OLAF.Tools.dll - 没有Microsoft.Data.SqlXml.dll,这让我感到惊讶。另一件奇怪的事情是即使缺少该dll,应用程序也可以正常执行。
所以我的问题是:
- 为什么Microsoft.Data.SqlXml.dll没有复制到OLAF.Generator控制台应用程序的bin文件夹中? - 应用程序如何解析Microsoft.Data.SqlXml.dll所在的目录?
谢谢,Pawel
编辑1:(在得到Marc Gravell的回答后)
@Marc Gravell: 您的答案让我深思。我可以保证,我总能在主应用程序的bin目录中看到间接依赖的程序集。 我不同意您的看法 - 尽管我尊重您 :)
当然,引用并不会物理级联(我们正在谈论与类、接口等的强关系) - 这正是我构建OLAF.Tools库时想要实现的。 那个库提供了一层抽象,它包含了工厂,而一个工厂接受字符串作为参数并返回接口。该接口的一个特定实现使用Microsoft.Data.SqlXml组件。结果,OLAF.Generator使用位于OLAF.Tools中的接口,但不知道Microsoft.Data.SqlXml中的组件。除此之外(我想我们都知道我在上段所解释的内容),在构建应用程序时,依赖程序集应该被复制(如果“复制本地”设置为TRUE)。我刚刚写了一个示例应用程序,项目B库引用项目A库,而项目C(控制台应用程序)引用项目B。在项目C的bin目录中,我可以看到所有文件:Project A.dll、Project B.dll和Project C.exe。因此,在讨论的情况下,Microsoft.Data.SqlXml为什么没有出现在OLAF.Generator bin文件夹中与该程序集本身有关。
编译器/Visual Studio是否知道Microsoft.Data.SqlXml位于自动探测的目录(或者它在GAC中),这就是该程序集未被复制的原因?
编辑2: 我刚刚检查了GAC,确实安装了Microsoft.Data.SqlXml.dll.