如果程序集A(可执行)引用程序集B,它是否应引用所有程序集B的引用(即使它不使用使用这些引用的类)?
答案 0 :(得分:3)
编辑:关于将间接引用复制到“main”项目的输出文件夹中的情况,现在存在一定的混淆。它可能完全取决于Visual Studio的版本,除了其他任何东西。 Visual Studio 2010似乎在计算实际使用的间接引用的程序集时使用了一定的智能 - 但对我来说,确切的逻辑对我来说是一个谜。
如果在你的情况下所有必需的程序集最终被复制,那么你也可以将你的引用列表缩短 - 但是可能值得查看是否缺少某些间接引用,以及是否他们对你很重要。特别是,任何在B中出现但仅通过反射加载的引用可能不会被复制......
旧答案
不必然 - 如果它不使用B中任何需要其他引用甚至间接的任何功能,那么可以不添加额外的引用。但是,这意味着依赖于B中哪些功能需要哪些额外引用的实现细节。我认为添加所有引用通常更安全,除非B提供商有非常明确的指导原则,在哪些情况下需要哪些引用。
编辑:为了清楚起见,只要B
具有执行时所需的所有程序集,就不会 添加引用。确保将所有内容与A
一起复制的最简单方法是添加对A
的引用。它更多的是部署简化而不是其他任何东西。如果从GAC加载B
的引用(不是我个人喜欢的话)那么它根本不重要;如果它们是在本地加载但你愿意将文件显式复制到部署文件夹中,那也没关系......但是将程序集添加到A
程序集引用列表中更简单。 (我认为这也是合乎逻辑的 - 为了正确执行,它们仍然需要程序集A
,即使这是间接要求。)
答案 1 :(得分:0)
如果任何间接引用的程序集有可能在构建计算机上的GAC中,但在运行时不在GAC中,那么您应该向那些间接引用的程序集添加显式引用并设置CopyLocal = True。这是因为GAC中间接引用的程序集不会被复制到bin文件夹。我的回答here中的更多细节。