这是我previous posting关于缺少用于软件安装的干净测试机的问题。我在解释DLL依赖关系如何工作以及某些机器在安装时可能没有正确的库方面做得很糟糕。问题在于它被构建过程视为缺陷。我正在努力教育高层人员,这不是构建过程本身,而是安装过程应该受到责备。
以下是我老板的一句话,将分包商的工作与我们的工作相提并论:
我不是软件人。我所看到的是,当他们向我们提出一些东西时,它只是起作用,但是当我们向客户提出一些东西时会出现各种各样的问题。你如何构建代码肯定有问题。
[edit]当转包商应用程序到达时,它们可以直接复制到我们的开发机器上,因为我们的机器包含所有正确的Microsoft运行时库。但是,在客户机器上,并非所有客户机都包含这些依赖关系。[/ edit]很容易看出聪明的人(聪明的)是如何得出错误的结论的。那你怎么解释整个DLL依赖问题呢?
答案 0 :(得分:2)
你可以使用他可能更熟悉的类比。就像搬进新办公室一样。
让我们说你是承包商,你决定要搬进新的办公室。你列出了你认为在新办公室里需要的所有东西,互联网,电话,传真,复印机,压力球等。然后你决定进入一个共享办公室,这个办公室已经有很多这样的东西,还有更多。所以你搬进去了。你带走了它没有的东西,比如压力球,盆景树等。
你没有意识到的是,除了列表中的所有内容之外,还有其他一些你在共享办公室开始使用的东西,比如咖啡机,打孔机等你这样做是相当盲目的,所以你不要将这些东西添加到“必需品”列表中。
然后你和共享办公室里的一些人分手了,所以你决定,到底是什么,你会独自去做,然后得到一个全新的空办公室。因此,您可以获得所需的所有物品清单,然后开始订购。大。除了当你搬进新的办公室时,你会发现没有咖啡机,打孔机等。
因此,尽管您仍然像以前一样,但由于您无法获得所需的某些依赖项,因此您无法完全完成工作。
所以在这个'你'是你编写的软件,办公室是你正在安装的机器,依赖是你的软件所依赖的东西,以及你需要它安装构建过程的列表。
也许......
答案 1 :(得分:2)
他说你做错了是正确的,因为如果它们不是标准的系统DLL,你应该用程序打包这些DLL,可能使用安装程序来获得系统上必要的先决条件。如果您不允许这样做,那么您需要采取不同的方式,例如使用静态链接(必要的代码包含在可执行文件中)。
然而,这里有一个类比,你可以用它来解释问题所在。
程序本质上是一个知道如何完成一项特定任务的工作者(它可能是一个非常复杂的任务,有很多子任务或一个非常简单的任务,但它最终只是一个任务)。为了完成这些任务,他必须使用一些工具 - DLL。
不同的任务需要不同的工具 - 就像你需要锯子而不是锤子一样,如果你想将木板切成两半,你需要不同的DLL来完成不同的任务。
如果没有合适的工具(DLL),那么工作人员(程序)就无法完成他的工作,因为他的任务依赖于这些工具。如果他不能完成他的工作,他会告诉你“我没有这个工具,我需要它去做我应该做的事。”
这就是你的客户正在发生的事情:你已经给了他们工人(程序),但你还没有给他们工具(DLL),而工人没有带他们(静态链接)。