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

时间:2012-12-06 20:18:00

标签: c# dll reference

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

是否安全

5 个答案:

答案 0 :(得分:10)

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

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

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

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

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

总结:

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

答案 1 :(得分:7)

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

不 - 您可以根据需要添加新的DLL。只要新的DLL不破坏任何旧功能,就不需要重建引用项目。