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

Roh*_*ith 7 .net c# project-reference dll-reference

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

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

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

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

Fra*_*nov 6

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

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

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

  • 另外要添加答案,如果你的项目B依赖于让我们说C.dll,如果B被指定为A的项目依赖项,编译项目A将自动带来项目B的依赖项(例如C.dll).相反,如果你包含对B编译的dll的引用,你将不会自动将C.dll添加到A的bin中,而是需要手动添加所有B的依赖项. (5认同)