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