【问题标题】:DLL Hell issues: Assigning strong namesDLL Hell 问题:分配强名称
【发布时间】:2014-01-30 08:57:35
【问题描述】:

我有两个 DLL,app1.dll 和 app2.dll,它们使用相同的第三个 dll,util.dll,当为特定应用构建时,它们的行为可能略有不同。

我想实现 app1.dll 和 app2.dll 关于他们使用的 util.dll 版本的隔离。在 MSDN 上,我读到为 util.dll 分配一个强名称是解决方案,即这个强名称包含 dll 的名称和版本以及由于签名而产生的指纹。

我目前正在构建 util.dll...

  • 对于带有 KeyFileApp1.snk 和版本 1.0.0.1 的 app1
  • 对于带有 KeyFileApp2.snk 和版本 1.0.0.2 的 app2

当使用相应的 util.dll 构建部署应用程序时,此接缝可在目标机器上工作。

但是,我有一些模棱两可的地方:

  1. 是否始终使用版本 1.0.0.0 构建 util.dll,但两个应用程序的密钥文件不同,并且最终让两个应用程序使用正确的 dll 是否足够?
  2. 是否仅在将 dll 放入全局程序集缓存或将其作为私有程序集时才考虑强名称?

【问题讨论】:

  • 如果我是你,我肯定会通过版本号来区分 util.dll 的两个版本(不需要是主要版本),否则你要求的是你提到的 dll 地狱在标题中。

标签: c# .net visual-studio-2010 dll dllregistration


【解决方案1】:
  1. 是的,您可以使用相同的名称和版本,但公钥不同。它是否是好的/可维护的解决方案 - 取决于您。可能会让更多的人感到困惑,而不是你想要的。 IE。没有普通人能够告诉您 DLL 使用的“公钥”,但大多数人可以右键单击并查看详细信息以查看版本(如果您在程序集上正确设置)。

  2. 始终考虑强名称。请注意,如果您有本地和 GAC 副本,如果 GAC 中的版本可接受,则将始终使用 GAC。

注意事项:

  • 强名称是“病毒性的”,因为您不能将强命名程序集依赖于没有强名称的程序集。请小心,因为您需要许多程序集才能进行强签名(这本身并不是一件坏事)并有良好的版本控制计划。
  • 您最终可能会在进程中加载​​同一程序集的多个版本 - 要么做好准备,要么使用发布者政策将所有版本映射到最新版本。

【讨论】:

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