2

场景:我们有一个服务器,上面托管了多个 ASP.NET 网站。几天前,这些网站中有不少“崩溃”并出现以下错误:

警告 44 无法解析此引用。找不到程序集“AjaxControlToolkit,Version=1.0.10920.32880,Culture=neutral,PublicKeyToken=28f01b0e84b6d53e,processorArchitecture=MSIL”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。

经过一番调查,似乎在服务器上安装了(商业)CMS 系统,并且这已将第 3 方AjaxControlTookit添加到全局程序集缓存中。它没有问,它只是添加了它(实际上它添加了两个版本:1.0.10618.0和3.0.20229.0)。这导致了解决冲突,因为相关网站在其本地 /Bin 目录中引用了不同版本的工具包。

所以,我想我的问题是:你认为这个 CMS 在 GAC 中安装这些程序集是否可以接受(特别是考虑到这些程序集是开源库而不是它们自己的)?还是因为在 /Bin 文件夹中引用程序集的方式没有更明确而“崩溃”的网站?谢谢。

4

2 回答 2

8

不,我不认为这是可以接受的。

该程序集应该已放在应用程序的bin文件夹中。

安装程序应尽可能在本地进行更改。

在许多情况下,最好的安装程序根本就不是安装程序。至少对于服务器端应用程序。我宁愿有一个 zip 文件 +INSTALL.txt说:

  1. 系统要求:IIS、ASP.NET 2.0、SQL Server 2005
  2. 创建新的空目录
  3. 解压内容到目录
  4. 创建指向目录的 IIS 虚拟目录
  5. 执行foo.sql文件创建数据库
  6. 在中配置数据库连接字符串web.config

我曾经看到 Windows Installer 被描述为:“Windows 注册表的激进右翼”。觉得蛮好笑的。。。

于 2009-07-20T11:59:23.230 回答
3

如果没有明确记录安装将程序集放在 GAC 中,那么我会责怪软件的开发人员/打包人员。如果它被清楚地记录在案,那么我会责怪安装该软件的系统管理员不了解安装的含义。

在大多数情况下,我认为在 GAC 中进行安装是不必要的——我个人不认为——但我认为在某些情况下它似乎是最合理的解决方案。他们也可能只是将另一个安装程序与他们的安装程序打包在一起,作为确保满足他们的依赖关系的最简单方法。不理想,但如果他们期望软件通常安装在独立服务器上,这是一个可以理解的决定。

于 2009-07-20T12:05:28.503 回答