当前位置: 首页 > 编程语言 > C#

将间接引用的程序集复制到输出目录-丢失的程序集分享

时间:2023-04-10 19:09:25 C#

将间接引用的程序集复制到输出目录-丢失的程序集我有以下情况:所以我的问题是:谢谢你,Pavel编辑1:(在MarcGravell的回应之后)@MarcGravell:你的回答让我三思而后行,因为我可以发誓我总是可以在主应用程序的The在bin目录中可以看到间接依赖的程序集。恕我直言,我不同意你的看法-尽可能多地尊重:)当然,引用不是物理级联的(我们正在谈论与类、接口等的牢固关系)-这正是我在构建OLAF.Tools库要实现。这个库提供了一个包含工厂的抽象级别,工厂接受一个字符串作为参数并返回一个接口。此接口的特定实现使用Microsoft.Data.SqlXml组件。因此,OLAF.Generator使用位于OLAF.Tools中的接口,但不知道Microsoft.Data.SqlXml中的组件。除此之外(我想我们都知道我在上一段中试图解释的内容),在构建应用程序时,应该复制依赖程序集(如果CopyLocal设置为TRUE)。我刚刚写了一个示例应用程序,ProjectBlib引用了ProjectAlib,ProjectC(控制台应用程序)引用了ProjectB。在ProjectC的bin目录中,我可以看到所有:ProjectA.dll,ProjectB.dll&ProjectC.exe。因此,在所讨论的场景中,Microsoft.Data.SqlXml不会最终出现在OLAF.Generatorbin文件夹中的原因与该程序集本身有关。编译器/visualstudio是否知道Microsoft.Data.SqlXml在自动探测目录中(或者在GAC中),这就是它不复制该程序集的原因?编辑2:我刚刚检查了GAC,确实,Microsoft.Data.SqlXml.dll安装在GAC中。复制本地如何工作?log4net.dll没有被复制到MyProject输出目录-这是我的问题的答案。在GAC中安装库时,即使使用COPYLOCAL设置也不会复制它。引用不会自动级联,因此添加对OLAF.Tools的引用也不会添加对SQLXML的引用。如果您正在使用exe部署SQLXML,那么最方便的方法是从exe中显式添加对SQLXML的引用并将其设置为复制本地。没有它,它不会被部署。基本上,开发人员有责任决定在运行时实际需要哪些文件(这通常是所用引用的子集,并且取决于许多只有您知道的部署决策)。关于如何在运行时解决...探测路径有点黑术,主要是“应用程序文件夹”,但这取决于配置,实际上可以咨询GAC。您还可以通过AppDomain.Current.AssemblyResolve提供自己的解析器。以上就是C#学习教程:将间接引用的程序集复制到输出目录-缺少程序集分享的全部内容,如果对大家有用还需要详细了解C#学习教程,希望大家多多付出注意啦~本文来自网络合集,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: