【问题标题】:Is it possible to add/update assemblies to the GAC via a Nuget Package?是否可以通过 Nuget 包向 GAC 添加/更新程序集?
【发布时间】:2013-11-06 16:26:39
【问题描述】:

毫无疑问,Nuget 是一个极其有效的包装和分销系统。但是,在某些情况下,管理程序集文件会变得很麻烦。对于站点中的许多(30 多个)子应用程序设置为继承引用的 Web 应用程序,这一点尤其明显。在我的情况下,单点继承是可取的,因为可以轻松地为所有子项目更新库。将这些程序集可靠地存储在根目录中对我来说已经成为问题。为了帮助管理这一点,我想将 GAC 用于这些特定的库..

有没有办法通过 nuget 包脚本将这些库安装/更新到 GAC?我总是可以诉诸传统手段,但如果可能的话,我想利用 Nuget。该程序集将被添加到服务器 GAC,但该软件包的目的是让开发人员可以轻松地将程序集安装到其本地 GAC 并在本地/服务器环境之间保持相同的引用。

【问题讨论】:

  • 这将完全击败 NuGet 包的主要优势之一,即本地部署
  • 好吧,我明白了。只是高度方便和熟悉它。我想我会在此期间看看巧克力。

标签: nuget gac nuget-package


【解决方案1】:

您可以使用来自PowerShell GAC 的 PowerShell 脚本将程序集安装到 GAC,因此您的 install.ps1 脚本绝对可以做到这一点。

但是需要注意的是;这样做可能不会给大多数人他们想要的行为。每个项目都将使用对特定版本的强名称引用。仅仅因为一个项目更新了包并不意味着其他项目将更新它们的包,它们也不会使用 GAC 中的较新版本——除非程序集包含指定新版本替换旧版本,在这种情况下,项目使用的版本将与 nuget 认为安装的版本不匹配!

因此,很难准确推断正在使用哪个版本的程序集。通常,您只需查看 nuget 安装的软件包即可立即知道您拥有什么。

在我的例子中,我们使用 nuget 将二进制文件保存在 Git 之外,但一些二进制文件涉及 WinForms 设计器,如果程序集不在 GAC 中,他们会非常非常生气。我们一遍又一遍地遇到了无穷无尽的问题,直到我们硬着头皮把程序集放到 GAC 中。现在它完美无缺。因此,我们通过 nuget 在 GAC 中注册我们的私有自定义程序集,因此它会自动下载并注册它们,但我们有一个解决方案并保证所有项目同时升级。

【讨论】:

  • 感谢您的回答。我理解这种谨慎,但我们的情况与您描述的相似。我们希望将新的二进制文件自动部署到目标服务器上的 GAC,类似于“apt-get install unattended-upgrades”,但具有 Windows 容量。使用类似于您描述的系统,我们还可以通过包安装程序守护进程将“预”标记的包自动安装到我们的开发环境以及最终版本到上层环境。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2011-03-05
  • 2020-10-25
相关资源
最近更新 更多