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

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

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

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

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

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

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

总结一下:

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

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

您只需确保Bar项目的dll位于Foo项目的bin中。 只要方法签名没有改变,你就是好的。

关于引用程序集强名称的情况:假设A是任何程序集,B是强名称程序集,A引用B.然后(与上面的声明相反?)可以更改B的内容重新编译A.我只是尝试了这个,带有一个简单的A控制台应用程序和一个B类库。对强烈命名的B的更改在A中没有引起运行时错误。但是有一个特殊情况:如果B从如果命名不强,那么A需要重新编译,否则是运行时错误。

不 – 你可以根据需要输入一个新的DLL。 只要新DLL不破坏任何旧function,就不需要重建引用项目。