none
Windows Installer生成的软件,是不是不应该使用强名称? RRS feed

  • 问题

  •  

    Windows Installer生成的软件,是不是不应该使用强名称?

     

    它和ClickOnce的强名称会不会冲突?

    2009年1月16日 12:58

答案

  •  

    两个强签名是一样的东西,强签名跟COM里面的GUID一样,是唯一标识程序的方法
    2009年1月16日 14:56
  • 这两个方式使用的强名在原理上是完全一样的。
    这个技术可以有效防止Dll Hell,还可以防止程序集被非法的修改。
    2009年1月16日 15:34
    版主
  • 意思是说你对exe文件进行了签名,可能会导致不能引用没有签名的dll
    2009年1月17日 5:11
    版主
  • 1,就是指你编译生成的可执行程序
    2,一旦你用强名称签名了,基本就是给这个dll打了一个“印记”,这个dll拷贝到那里都有这个“印记”

    2009年1月17日 9:27
    版主
  • 能用啊!
    如果你的exe签名了,那么dll也要签名才行!
    2009年1月18日 4:51
    版主

全部回复

  •  

    两个强签名是一样的东西,强签名跟COM里面的GUID一样,是唯一标识程序的方法
    2009年1月16日 14:56
  • 这两个方式使用的强名在原理上是完全一样的。
    这个技术可以有效防止Dll Hell,还可以防止程序集被非法的修改。
    2009年1月16日 15:34
    版主
  •  

    ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vssoln/html/5fef3490-c519-4363-94fd-8b1ad260dab5.htm

     

     

    强名称签名或强命名为软件组件提供他人无法伪造的全局唯一标识。强名称用于保证组件依赖项和配置语句恰好映射到正确的组件和组件版本。

    强名称是由程序集的标识(简单文本名称、版本号和区域性信息)加上公钥标记和数字签名组成的。

    对于 Visual C#、 Visual Basic 和 Visual J# 项目,Visual Studio 通过“项目设计器”中的“签名”窗格启用强命名;请参见“项目设计器”->“签名”页。

    对于 Visual C++ 项目,使用链接器选项为程序集签名;请参见强名称程序集(程序集签名)。

    使用强命名的原因
    强命名为某个应用程序或组件提供了唯一标识,其他软件可以使用该标识对相应的应用程序或组件进行显式引用。例如,强命名使应用程序作者和管理员可以指定准确的用于共享组件的维护版本。这使不同的应用程序可以指定不同的版本,而不会影响其他应用程序。此外,还可以使用组件的强名称作为安全证据,以建立两个组件之间的信任关系。

    可以强命名的内容
    可以对 .NET Framework 程序集和 XML 清单进行强命名。其中包括:

    应用程序程序集 (.exe)

    应用程序清单 (.exe.manifest)

    部署清单 (.application)

    共享组件程序集 (.dll)

    应该强命名的内容
    应对共享 DLL 进行强命名。如果某个 DLL 不是应用程序的私有实现详细信息,而是可由多个应用程序使用的常规服务,则无论该 DLL 是否将要部署到全局程序集缓存,都建议使用强名称。

    必须强命名的内容
    必须对以下各项进行强命名:

    希望部署到全局程序集缓存 (GAC) 的 DLL。

    ClickOnce 应用程序和部署清单。默认情况下,Visual Studio 项目系统为 ClickOnce 部署的应用程序启用此项。

    用于 COM 互操作性的主互操作程序集。当从 COM 类型库创建主互操作程序集时,TLBIMP 实用工具强制进行强命名。

    不应该强命名的内容
    通常应避免对应用程序 EXE 程序集进行强命名。强名称应用程序或组件不能引用弱名称组件,因此,对某个 EXE 进行强命名会使该 EXE 无法引用与应用程序一起部署的弱名称 DLL。

    因此,Visual Studio 项目系统不对应用程序 EXE 进行强命名,而是对在内部指向弱名称应用程序 EXE 的应用程序清单进行强命名。

    此外,您可能还希望避免对应用程序的私有组件进行强命名。因为在这种情况下,强命名会使依赖项更加难以管理,并为私有组件增加不必要的系统开销。

    如何分配强名称
    在 Visual Studio 中,使用“项目设计器”的“签名”窗格对应用程序或组件进行强命名。签名窗格支持两个强命名方法:一个是使用强名称密钥文件;另一个是使用密钥提供程序。有关清单签名的信息,请参见如何:对应用程序和部署清单进行签名;有关创建强名称密钥 (.snk) 文件的信息,请参见如何:创建公钥/私钥对。

    使用密钥文件方法时,既可以使用现有密钥文件,也可以新建密钥文件。应始终使用密码来保护密钥文件,以防止他人使用该文件。

    密钥提供程序或证书存储区提供了另一种保证强名称密钥安全的方法。某些密钥提供程序使用智能卡作为工具来验证标识并防止密钥被盗。

    更新强名称组件
    仅通过复制新版本覆盖旧版本的方式,无法对强名称组件进行维护或升级。

    只要将新版本复制到应用程序目录中,就可以更新该目录中的弱名称 DLL;公共语言运行库 (CLR) 将加载实际存在的任何版本。

    对于强名称 DLL,必须重新编译整个应用程序或更新应用程序的 .config 文件,前一个操作可以使所有程序集引用都指向新版本,后一个操作可以指示运行库加载新版本而不加载旧版本。

    尽管强名称组件需要更多一点的维护,但是它的好处在于应用程序对运行时所需要的其他组件的版本非常明确。

     

     

     

    这是线下版的MSDN里的内容。它说的不应该强命名的内容,是什么意思?

    2009年1月17日 3:13
  • 意思是说你对exe文件进行了签名,可能会导致不能引用没有签名的dll
    2009年1月17日 5:11
    版主
  •  

    exe文件,是不是指软件本身?还是指其它的exe文件?

     

    没有签名的dll文件,是在软件开发者的电脑里,还是在最终用户的电脑里?

     

    我还是不清楚具体指什么文件。

    2009年1月17日 8:51
  • 1,就是指你编译生成的可执行程序
    2,一旦你用强名称签名了,基本就是给这个dll打了一个“印记”,这个dll拷贝到那里都有这个“印记”

    2009年1月17日 9:27
    版主
  • 打了印记又怎样?不能用了?

     

    到底能不能用强名称?

    2009年1月17日 14:51
  • 能用啊!
    如果你的exe签名了,那么dll也要签名才行!
    2009年1月18日 4:51
    版主
  • dll又如何签名?

     

    是不是只能使用软件开发者的dll? 最终用户电脑里的系统或其它软件的dll不能调用吗?

    2009年1月18日 7:50