7

假设我有两个项目 A 和 B。A 依赖于 B。我可以通过两种方式指定它:

  • 在同一解决方案中包含 A 和 B,并将 B 指定为 A 的项目依赖项。这在 A 的 msbuild 项目中显示为“ProjectReference”节点。
  • 包括对 B 的已编译 dll 的引用作为 A 的依赖项。这在 A 的 msbuild 项目中显示为“参考”节点

我的问题是,一旦我为 A 构建了程序集,这两种方法之间的最终输出是否存在差异。

我尝试创建几个简单的项目来模拟这种关系并尝试进行比较 - 但不同的比较工具告诉我不同​​的事情。在写一些逐字节比较这些文件的东西之前,我想知道你们是否对此有所了解。具体来说,如果我使用 dll 引用而不是项目引用,构建的程序集的行为会有什么不同。

4

2 回答 2

6

如果项目 B 的源在项目 A 的两次构建之间没有更改,则项目 A 输出的行为不会有任何差异。但是,如果项目 B 的源已更改,将其作为项目 A 的项目引用将导致项目 B 也被重建。这种差异决定了您选择如何从项目 A 中引用项目 B:

  • 如果您同时拥有项目 B 和项目 A 的源代码,并且它们是紧耦合的,或者如果它们都在积极开发中并且项目 B 经常对其公共接口进行重大更改,那么您希望将项目 B 引用为项目。这将确保项目 A 在其构建中始终使用项目 B 的最新输出。

  • 如果项目 B 是您自己不开发的外部依赖项,或者您没有源代码,或者如果它已经发布并且您无法与项目 A 一起发布修改版本,您想引用预构建的项目 B 输出,以确保您使用相同版本的项目 B 进行开发和测试,该版本最有可能在您用户的计算机上。

于 2010-09-15T04:36:56.643 回答
3

添加为项目引用的好处是,如果需要,程序集“B”会自动构建。

一旦构建了程序集“A”,就没有区别了。

于 2010-09-15T04:35:52.387 回答