【问题标题】:Bind to a specific assembly version from GAC绑定到来自 GAC 的特定程序集版本
【发布时间】:2014-09-03 12:28:18
【问题描述】:

我们有一个 Visual Studio 包(VS 包),它引用了两个类库项目:项目 A 和项目 B。项目 A 又引用了另一个类库项目(项目 B)。

所以依赖结构看起来像这样: VS 包 -> 项目 A -> 项目 B

所有项目都存在于同一个解决方案中,并且依赖项已设置为正确的项目引用。部署 VS 包时,项目 A 和项目 B 的程序集被部署到 GAC。程序集是强命名的。未指定绑定重定向。

我们部署了同一个 VS 包的多个版本,因此项目 A 和项目 B 程序集的多个版本在 GAC 中。问题是无论执行哪个版本的 VS 包,它总是从 GAC 加载最新的程序集版本。

我们如何强制从 GAC 加载正确版本的程序集,即构建 VS 包项目时使用的版本?

谢谢。

编辑了我的原始帖子以更准确地描述我的情况。

【问题讨论】:

  • 你能在你的问题中显示参考文献吗?
  • 你能说得更具体一点吗?
  • 您的 web.config 中可能有诸如 <add assembly="..." /> 之类的行引用程序集。
  • 程序集通过 ProjectReference 引用:{2b48b2ba-6ea5-4b1d-a678-97dca29bd223}foo.vcs12False
  • 这仅适用于 Visual Studio。在某个地方,部署的站点在运行时告诉框架有关引用的信息。你的 web.config 没有像我展示的那样的行吗?

标签: c# .net .net-assembly gac


【解决方案1】:

这应该可以解决问题,但我不建议您避免使用 GAC 并关闭您的库。

Assembly SampleAssembly;
SampleAssembly = Assembly.LoadFrom("c:\\Sample.Assembly.dll");

For more information read the manual

【讨论】:

    【解决方案2】:

    在参考的属性窗口中,您可以将Specific Version 设置为true。

    【讨论】:

    • 如果您有项目参考,则该选项不可用。
    • 由于某种原因,主程序集不会从 GAC 加载项目构建期间使用的相同程序集版本
    • “特定版本”在编译时执行,而不是在运行时执行。
    • 鉴于您遇到的问题,您可能希望将其更改为 dll 引用,这将为您提供所需的版本控制。
    • @mike 我同意,但是对于作为项目输出的程序集,这是如何完成的。
    【解决方案3】:

    您可以添加Binding Redirect。这可以在各种级别上完成,例如机器、应用程序或发布策略。

    请参阅here 以获得指导。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      相关资源
      最近更新 更多