我们在用户磁盘上安装了一个很大的winform应用程序。 我们希望第三方能够编写使用我们的一些应用程序功能的应用程序。因此,我们编写了API.dll,它通过从注册表中解析安装目录来与其他一些程序集进行交互。我们将API.dll作为SDK发送给第三方。关于第三方应用的实际部署方式,有几个选项可供选择:
他们“复制本地”API.dll并附带它。缺点:我们无法在API.dll中进行更改(当然不会中断),因为客户应用已将其复制。如果我们更改其交互的其他程序集(我们可能会这样做),我们可能需要更改它。
第三方不附带API.dll,而是将API.dll放在GAC中。缺点:GAC的麻烦,签约。
与#1相同,但API.dll只有抽象+工厂从我们的/ bin加载它们。缺点:可能并不总是变得微不足道,有些工作。
我不喜欢GAC,并试图避免它,但团队中的一些人在这里做了一点。你觉得怎么样?
答案 0 :(得分:4)
一般而言,作为潜在客户,我会不惜一切代价避开GAC。
关于第1点,我认为您的客户应用程序(和开发团队)更倾向于在自己的休闲和测试周期部署您的更新,而不是依赖于您的。这样他们就会在他们准备好的时候接受你的更新 - 如果他们已经规避了你刚才修复的“错误”怎么办?
关于第2点,除了您自己的文档中显示的约定外,您将很难让每个人实际使用此机制。当然,我仍然总是使用第三方程序集的本地部署。
关于第3点,您可以这样做......但它可能会惹恼您的客户。如果你要做出如此大的努力来保持第三方供应商软件的更新,你应该质疑你是否过早地发布了你的库。
另外,从您的角度来看,我宁愿保留进行重大改变的权利(当然也要记录下来)。如果您的升级模型不允许您正确地重构和弃用旧代码,那么您将很难让您的产品更好。
我的两分钱。