C# DLL地狱问题:指定强名称

C# DLL地狱问题:指定强名称,c#,.net,visual-studio-2010,dll,dllregistration,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 对于具有KeyFileApp1.snk和版本1.0.0.1的app1 对于具有KeyFileApp2.snk和版

我有两个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.0.0.0构建util.dll是否足够,但两个应用的密钥文件不同,并且最终两个应用都使用正确的dll
  • 强名称是否仅在将dll放入全局程序集缓存或将其作为专用程序集时考虑
  • 是的,您可以使用相同的名称和版本,但公钥不同。这是一个好的/可维护的解决方案-由您决定。可能会让更多的人感到困惑。也就是说,一般人无法告诉您DLL使用的“公钥”,但大多数人可以右键单击并检查详细信息以查看版本(如果您在程序集上正确设置了该版本)

  • 始终考虑强名称。请注意,如果您有本地和GAC副本,并且GAC中的版本是可接受的,那么将始终使用GAC副本

  • 注:

    • 强名称是“病毒性的”,因为您不能让强名称程序集依赖于没有强名称的程序集。要小心,因为您的程序集需要有很多强签名(这本身并不是一件坏事)和良好的版本控制计划
    • 最终,您可能会将同一程序集的多个版本加载到流程中—为此做好准备或使用publisher策略将所有版本映射到最新版本

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