DLL Hell问题:分配强名称

时间:2014-01-30 08:57:35

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

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

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

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

  • for app1 with KeyFileApp1.snk和version 1.0.0.1
  • for app2 with KeyFileApp2.snk and version 1.0.0.2

并且在使用相应的util.dll构建部署应用程序时,此接缝可在目标计算机上运行。

但是,我有一些含糊之处:

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

1 个答案:

答案 0 :(得分:2)

  1. 是的,您可以使用相同的名称和版本,但使用不同的公钥。它是好的/可维护的解决方案 - 由您决定。可能会比你想要的人混淆更多的人。即没有普通人可以告诉你DLL使用的“公钥”,但是大多数人可以右键单击并检查详细信息以查看版本(如果你在程序集上正确设置它)。

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

  3. 注意:

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