【问题标题】:Define a .net reference to always use the latest version of a GAC'd dll?定义一个 .net 引用以始终使用最新版本的 GAC'd dll?
【发布时间】:2010-01-06 20:24:34
【问题描述】:

我们有一个供应商正在为我们编写一个使用我提供给他们的 dll 的应用程序。我的老板刚刚发现,如果我们需要对其中一个 dll 进行更改,我们必须向供应商提供更新版本,以便他们重新编译他们的项目。这会导致问题,因为我们没有自动化测试,而且任何新版本都需要我们的 QA 部门进行完整的测试。

我之前没有对 GAC 做过太多工作,但我相信它可能就是我们正在寻找的。有没有一种方法可以将我的 dll(我提供给供应商的那个)部署到 GAC 并让供应商构建他们的 .net 项目,以便始终从 GAC 获取最新版本?

【问题讨论】:

    标签: .net dll assemblies gac global-assembly-cache


    【解决方案1】:

    他们需要在他们正在编译的项目中将引用的SpecificVersion 属性设置为false。请参阅this questionthe article that it links to

    【讨论】:

      【解决方案2】:

      如果您对 DLL 进行了重大更改,您当然需要发布新版本,以便您的供应商可以使用它进行编译。

      但除此之外,供应商无需拥有最新版本。相反,您可以使用Assembly Binding Redirection 来确保您在运行时使用的是最合适的(通常是最新的)版本。

      如链接文章中所述,有几种方法可以实现此目的 - 最常见的是使用应用程序配置文件中的设置(如果您只想影响此应用程序)或发布者策略文件(如果您想影响所有使用共享程序集的应用程序)。

      【讨论】:

      • 默认情况下,任何强签名程序集(您必须将其放入 GAC)都绑定到特定版本,这违反了此建议。正如我在回答中建议的那样,供应商必须将SpecificVersion 选项设置为false
      • "...打破这个建议" - 不,SpecificVersion 选项会影响 Visual Studio。在运行时,尽管在构建时指定了特定版本,但程序集绑定可以被覆盖。
      • @Joe 你能详细说明一下吗?如果我有引用 3rd 方库 X 的项目 A,我能否以在运行时使用 X 的最新可用版本而无需每次都编写绑定重定向配置的方式构建 A?
      • @Mr. TA,如果您使用二进制引用引用 3rd 方程序集,并使用 Copy Local 将其复制到项目的输出目录,您将始终自动拥有最新版本。
      • @Joe 是的,如果我重新构建我的项目。如果我不能(或者很难/耗时)重建我的项目怎么办?
      猜你喜欢
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多