最终编译程序集中.Net中项目和dll依赖项之间的差异

假设我有两个项目A和B. A取决于B.我可以用两种方式指定:

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

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

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

如果项目B源在项目A的两个版本之间没有变化,则项目A输出的行为将没有差异。 但是,如果项目B源已更改,则将其作为项目A中的项目引用也将导致项目B重建。 这种差异决定了您如何从项目A中引用项目B:

  • 如果您拥有项目B和项目A的源,并且它们是紧密耦合的,或者如果它们都处于活动开发状态并且项目B经常断开其公共接口的更改,则您希望将项目B作为项目引用。 这将确保项目A始终在其构建中使用项目B的最新输出。

  • 如果项目B是外部依赖项,您不自行开发,或者您没有源代码,或者如果它已经已经发货且您无法运送带有项目A的修改版本,则需要参考预先构建的项目B输出,以确保您使用相同版本的项目B进行开发和测试,最有可能在您的用户的计算机上。

添加为项目参考只是具有如果需要则自动构建组件“B”的优点。

一旦组装“A”,就没有区别。