如果我重建我的项目引用的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,就不需要重建引用项目。