最终编译的程序集中.Net 中的项目和 dll 依赖关系之间的差异
-
02-10-2019 - |
题
假设我有两个项目 A 和 B。A 依赖于 B。我可以通过两种方式指定:
- 将 A 和 B 包含在同一解决方案中,并将 B 指定为 A 的项目依赖项。这在 A 的 msbuild 项目中显示为“ProjectReference”节点。
- 包含对 B 编译的 dll 的引用作为 A 的依赖项。这在 A 的 msbuild 项目中显示为“参考”节点
我的问题是,一旦我为 A 构建了程序集,这两种方法的最终输出是否存在差异。
我尝试创建几个简单的项目来模拟这种关系并尝试进行比较 - 但不同的比较工具告诉我不同的事情。在写一些逐字节比较这些文件的内容之前,我想知道你们是否对此有所了解。具体来说,如果我使用 dll 引用而不是项目引用,构建的程序集的行为是否会有任何差异。
解决方案
如果项目 B 源在项目 A 的两次构建之间没有更改,则项目 A 输出的行为不会有任何差异。但是,如果项目 B 源已更改,将其作为项目 A 中的项目引用将导致项目 B 也被重建。这种差异决定了您选择如何从项目 A 引用项目 B:
如果您同时拥有项目 B 和项目 A 的源代码,并且它们紧密耦合,或者它们都在积极开发中,并且项目 B 的公共接口经常发生重大更改,那么您希望将项目 B 引用为项目。这将确保项目 A 在其构建中始终使用项目 B 的最新输出。
如果项目 B 是外部依赖项,您不是自己开发的,或者您没有源代码,或者它已经发布并且您无法与项目 A 一起发布修改版本,则您需要引用预构建的版本项目 B 输出,以确保您使用最有可能在用户计算机上的相同版本的项目 B 进行开发和测试。
其他提示
添加为项目引用的优点是,如果需要,可以自动构建程序集“B”。
一旦构建了组件“A”,就没有区别了。
不隶属于 StackOverflow