我在.NET开发人员的大部分职业生涯中一直是ASP.NET / WC开发人员,因此我非常习惯于将所有DLL放在IIS目录的bin文件夹中。
但是,在最近的一个项目中,我们必须在WCF Web服务和几个.exe程序之间共享几个DLL(大约50个),因此我们的一个团队成员建议我们可以将这些DLL安装到GAC中。
我看不出这个想法有什么问题,但我只是觉得将特定产品的数据访问和业务逻辑等域DLL安装到GAC中是错误的,因为这些DLL不像System.Data,这是可以在许多不同的产品中重复使用。
您是否将产品的DLL安装到GAC中?
答案 0 :(得分:7)
警告,这是一个神圣的战区
我已经看到了两种方式,如果共享DLL我们通常是GAC它(这是我们简单的经验法则)。基本上我们不希望多次出现相同的DLL。但是,如果库不稳定,我们会绕过此规则,也就是经常进行更改/新版本。
有些人认为最好自己封锁(置于垃圾箱中),以防止有人重新安装可能导致应用程序崩溃的gac'd dll。通常,无论何时使用共享库,都需要在进行更改时注意。如果你打算打破其他人,你可能想考虑增加版本。然后,您可以将两个版本部署到GAC。
反对放置bin的另一个论点是,如果要安装新版本,则必须将其放在N个不同的位置。
我的偏见通过我的答案显示(我更喜欢gac而非重复)
答案 1 :(得分:5)
大多数情况下,我们不会将应用程序.DLL放在GAC上,这会导致一些重复,但是,超时会简化问题,因为版本控制(您拥有的应用程序越多,它们以不同的速度发展的越多)比浪费一些(廉价)磁盘空间更难。
答案 2 :(得分:3)
我宁愿将它们保存在bin文件夹中 - xcopy部署要容易得多。
答案 3 :(得分:-1)
如果您需要更新放置在那里的DLL,部署到GAC是一场噩梦。无论进入GAC,都应该 相当静态, 可版本化的内容。否则,不会放入GAC 。
另一种方法可能是在1)安全的Intranet Web服务器或2)常用的网络文件夹上托管共享DLL,并使用AssemblyResolve (MSDN link here)方法加载它们。我们在目前的项目中这样做,并且非常非常有效。