如果我重建我的项目引用的dll,我是否还必须重建项目?

Pio*_*nom 16 c# dll reference

我一直在编写这个程序(FOO),它包含对dll(BAR)的引用.所有BAR包含的是执行各种不同计算的方法. FOO将能够在多台计算机上安装和部署.我的问题是,如果我在其中一个方法中更改公式(即更改x + yx - y),我是否需要重新构建FOO新方法BAR?更重要的是,部署新版本是否安全BAR

Rob*_*obV 10

@ vcsjones的评论提出了一个重要的观点.

当且仅当程序集版本没有更改且您没有使用强名称程序集时,您可以将新DLL作为替换.

如果版本确实发生了更改,那么您可能会收到运行时错误,因为您的程序会尝试加载特定版本并获得与预期不同的版本.但是,如果没有方法签名发生变化,这可能会正常工作,但我不保证,并且总是建议重新编译.

使用强名称程序集时,这更是一个问题,因为强名称会对程序集的版本和数字签名进行编码.因此,如果程序集中的任何代码已更改,则即使版本尚未更改,数字签名也会更改,因此强名称会更改.

同样,这将导致运行时错误,因为程序期望的强名称与程序集强名称不匹配.因此,在这种情况下,总是需要重新编译.

总结一下:

  • 代码更改,没有版本更改,没有强名称 - 没关系
  • 版本更改和无强名称 - 可能需要重新编译,建议
  • 代码更改和强名称 - 需要重新编译
  • 版本更改和强名称 - 需要重新编译

  • 以上是错误的.强命名程序集_is_的目的是通过允许您指定较新版本何时适合替换旧版本来促进对哪个版本的组件加载进行细粒度控制.这可以在应用程序端,组件端或系统上(由管理员)完成.例如,如果Bar的发布者创建了一个新的v1.5,他们可以将其推送到使用v1.3-v1.4的所有应用程序(例如Foo),因为v1.5可以作为这些应用程序的下载.(小心使用!)[见这里!](https://msdn.microsoft.com/en-us/library/ms973869.aspx) (2认同)

Mar*_*lor 7

如果更改方法中包含的公式,则无需重建程序.但是,如果通过更改调用参数来修改方法的签名,则需要重新构建程序.