能否通过Nuget包向GAC添加/更新程序集?

14
毫无疑问,Nuget是一种非常有效的打包和分发系统。然而,在某些情况下,管理装配文件会变得很麻烦。特别是对于像网站这样设置了许多(30多个)子应用程序来继承引用的Web应用程序,这一点尤为明显。由于库可以轻松更新所有子项目,因此单个继承点在我的情况下是理想的。对我来说,可靠地将这些装配件存储在根目录中已成为一个问题。为了帮助管理这个问题,我想使用GAC来管理这些特定的库。
有没有一种方法可以通过nuget包脚本安装/更新这些库到GAC?如果可能的话,我总是可以采取传统方式,但我想利用Nuget来解决这个问题。该装配件将添加到服务器GAC,但该软件包的目的是允许开发人员轻松将装配件安装到其本地GAC并在本地/服务器环境之间维护相同的引用。

1
这将完全破坏NuGet软件包的主要优势之一,即本地部署。 - Ventsyslav Raikov
没错,我明白那一部分。只是这种方式非常方便和熟悉。我想在此期间我会看看chocolatey。 - NickSuperb
1个回答

8
您可以使用PowerShell脚本从PowerShell GAC将程序集安装到GAC,因此您的install.ps1脚本肯定可以执行此操作。但是需要注意的是,这样做可能不会给大多数人带来他们想要的行为。每个项目都将使用对特定版本的强名称引用。只因为一个项目更新了包并不意味着其他项目会更新其包,也不会使用GAC中的新版本-除非程序集包含绑定策略,指定新版本替换旧版本,在这种情况下,项目使用的版本将与nuget认为已安装的版本不匹配!因此,确切地推断出正在使用哪个程序集版本可能变得非常困难。通常,您只需查看nuget已安装的软件包即可立即知道您拥有什么。
在我的情况下,我们使用NuGet将二进制文件保存在Git之外,但是其中一些二进制文件涉及WinForms设计师,如果程序集不在GAC中,它会变得非常非常愤怒。我们反复遇到无数问题,直到我们咬紧牙关将程序集放入GAC中为止。现在它完美地工作了。因此,我们通过NuGet在GAC中注册我们的私有自定义程序集,以便自动下载和注册它们,但我们有一个解决方案并保证所有项目同时升级。

感谢您的回答。我理解您的谨慎,但我们处于与您描述的类似情况。我们希望自动部署新的二进制文件到目标服务器的GAC,类似于“apt-get install unattended-upgrades”,但在Windows环境下。使用类似于您描述的系统,我们还可以通过软件包安装程序守护程序自动安装“pre”标记的软件包到我们的开发环境以及最终版本到上层环境。 - NickSuperb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接