3

在.NET 工作多年后,我问了一个基本问题。一个刚毕业的孩子问我这个问题,我突然很困惑!

我在我的 .NET 项目中引用了一个 IBM DATA DB2 DLL。我们最初使用的版本是 9.7.0.2。因此,在我们运行了一些测试之后,我们将 IBM DATA DLL 升级到了 9.7.6.2 版本。

现在的问题是,我应该重新编译我的代码然后运行它还是可以直接替换我的构建目录中的 IBM DATA DLL 并且它会运行良好吗?

我们什么时候应该理想地重新编译我们的代码?

谢谢索尼

4

5 回答 5

3

这取决于您如何引用 DLL。在解决方案资源管理器中,选择您的项目并在其中展开引用。选择 DLL 并查看属性编辑器窗口中的属性“特定版本”。如果它设置为 false,那么您可以只替换输出中的二进制文件,否则如果您的应用程序找不到确切版本的 DLL,它将引发错误。

于 2012-09-04T19:58:41.543 回答
2

除非您专门针对某个库的版本(如使用实体框架和 mysql 适配器时),否则不得更改库的版本,那么您需要更改版本号才能工作。其他情况发生在 API 更改时(不频繁,不理想,但确实发生了)。

于 2012-09-04T19:56:02.357 回答
2

这实际上完全取决于 DLL 和生成它的第 3 方。您需要查看文档并查找已弃用和修改的函数(您是否调用它们中的任何一个?)即使文档说没有任何更改和弃用,您仍然应该进行回归测试。文档不是代码,代码才是最重要的事实。

在一个完美的世界中,公共 API 不会改变或弃用任何东西,DLL(接口)的编写者只会添加新函数。不幸的是,我们不能指望这一点。

简而言之:如果您在 DLL 中调用的任何函数被修改或弃用,您必须重新构建,否则不会。

于 2012-09-04T19:59:17.793 回答
1

通常,第三方 DLL 应该是向后兼容的。但是,情况并非总是如此,您应该在升级时重新编译以确保它是。如果您在不编译的情况下交换 DLL 的版本,则可能会遇到各种运行时错误,这些错误很容易通过编译/测试检测到。

于 2012-09-04T20:01:13.687 回答
0

您不需要重新编译代码。这就是动态链接库的好处。

于 2012-09-04T19:53:45.587 回答