我在VS2008的项目--〉属性--〉签名中指定了签名.snk文件
但是有一个dll的项目总是说没有签名,没有办法被引用,不清楚为啥“程序集生成失败 -- 引用的程序集“Maintenance”没有强名称”

解决方案 »

  1.   

    1。首先确保你的动态链接库中,没有引用其它的非强名称库。
    2。工程-〉属性
    3。应用程序-〉程序集信息-〉版本号(随便你怎么写)
    4。签名-〉为程序集签名
    5。选择强名称 *.snk
    6.打开windows 资源管理器
    7。将snk 拉到c:\windows\assembly(自己琢磨一下,只要版本不同,windows 绝对不会弄错, nx)注(我曾经问过的一个问题)
    如果库发生了改变,需要重新copy *.snk么?答: snk 之需要copy一次。呵呵 :)
      

  2.   

    http://www.cnblogs.com/Sandwi/archive/2007/11/23/970270.html
      

  3.   

    或许你引用了没有签名的dll可以使用延时签名然后进行签名http://msdn.microsoft.com/zh-cn/library/t07a3dye(VS.80).aspx延迟为程序集签名一个单位可以具有开发人员在日常使用中无法访问的严密保护的密钥对。公钥通常是可用的,但对私钥的访问权仅限于少数个人。开发强名称程序集时,每个引用具有强名称的目标程序集的程序集中都包含了用于为目标程序集指定强名称的公钥的标记。这要求公钥在开发过程中可用。您可以在生成时使用延迟签名或部分签名,在可移植可执行 (PE) 文件中为强名称签名保留空间,但要将实际签名延迟至后面某些阶段(通常就在传送程序集之前)。下面的步骤说明了延时对程序集签名的过程: 从将执行最终签名的单位获取密钥对的公钥部分。此密钥通常是 .snk 文件的形式,使用 .NET Framework SDK 提供的强名称工具 (Sn.exe) 可创建此文件。 使用 System.Reflection 中的两种自定义属性来批注程序集的源代码: AssemblyKeyFileAttribute,它将包含公钥的文件的名称作为参数传递至其构造函数。AssemblyDelaySignAttribute,它通过将 true 作为参数传递至其构造函数,表明正在使用延迟签名。例如: Visual Basic 复制代码 
        <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
        <Assembly:AssemblyDelaySignAttribute(true)>
     
    C# 复制代码 
        [assembly:AssemblyKeyFileAttribute("myKey.snk")]
        [assembly:AssemblyDelaySignAttribute(true)]
     编译器将公钥插入程序集清单,并在 PE 文件中为完整的强名称签名保留空间。真正的公钥必须在生成程序集时存储,以便引用此程序集的其他程序集可获取密钥以存储在它们自已的程序集引用中。由于程序集没有有效的强名称签名,所以必须关闭该签名的验证。您可以将“强名称”工具与 –Vr 选项一起使用来执行此操作。 下面的示例关闭名为 myAssembly.dll 的程序集的验证。  复制代码 
    sn –Vr myAssembly.dll 警告  
    仅在开发阶段使用 -Vr 选项。将程序集添加到跳过验证列表会产生安全漏洞。如果将某程序集添加到跳过验证列表中,则恶意的程序集可以通过使用该程序集的完全限定程序集名称来隐藏身份,完全限定程序集名称由程序集名称、版本、区域性和公钥标记组成。这使恶意程序集也可以跳过验证。
     以后,通常是在即将交付前,将程序集提交给组织的签名机构,以便与“强名称”工具一起使用 –R 选项来实际进行强名称签名。 下面的示例使用 sgKey.snk 密钥对为名为 myAssembly.dll 的程序集签署强名称。  复制代码 
    sn -R myAssembly.dll sgKey.snk