假设我有两个项目 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”,就没有区别了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top