为了使COM对象能够被外部对象调用,类库组合必须有一个强名字。创建强名字需要用到SN.EXE名字: 
可是我不知道怎么使用啊?有没有高手给指点一下,谢谢~~~

解决方案 »

  1.   

    创建密钥
    Sn.exe –k mykeyfile.dat在你的项目中的AssemblyInfo.cs这个文件中
    [assembly: AssemblyKeyFile("创建的密钥文件对应的路径")]
      

  2.   

    谢谢FOXWEB,问题在于我不知道在哪里输入SN命令啊~
    创建的密钥文件对应的路径是不是要是全部路径~
      

  3.   

    命令行里面输入sn.exe密钥的文件路径一般使用相对路径
    AssemblyInfo.cs中已经有说明,下面是引用的AssemblyInfo.cs中的一些说明
    // 注意:
    //   (*) 如果未指定密钥,则程序集不会被签名。
    //   (*) KeyName 是指已经安装在计算机上的
    //      加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
    //       密钥的文件。
    //   (*) 如果 KeyFile 和 KeyName 值都已指定,则 
    //       发生下列处理:
    //       (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
    //       (2) 如果 KeyName 不存在而 KeyFile 存在,则 
    //           KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
    //   (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
    //       在指定 KeyFile 时,KeyFile 的位置应该相对于
    //       项目输出目录,即
    //       %Project Directory%\obj\<configuration>。例如,如果 KeyFile 位于
    //       该项目目录,应将 AssemblyKeyFile 
    //       属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
    //   (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
    //       文档。
      

  4.   

    我在命令窗口输入SN,EXE,他提示我说是无效的命令,怎么办?
    命令行里面输入sn.exe,我还是不大明白`比较笨~呵呵
      

  5.   

    Visual Studio .NET 工具->Visual Studio .NET 2003 命令提示
    再输入SN
      

  6.   

    如果你安装了Vs.net那么该程序就在你的
    <盘符>\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin
    或者
    系统根目录<系统根目录>\Microsoft.NET\SDK\v1.1\Bin 里面
      

  7.   

    我的项目在E盘下,文件夹名字叫做Database_COMObject,那么我的assembly: AssemblyKeyFile("..\\..\\mykey.snk")]该怎么写?我写了老是不对,说什么表示错误
      

  8.   

    直接把生成好的mykey.snk拷贝到项目文件夹里面-Database_COMObject
      

  9.   

    能告诉我密钥文件有什么用吗?是不是创建COM组件一定要用到它?
      

  10.   

    使用密钥文件可以保证你的名称的全局唯一性,在程序引用时不会出现dll冲突,也就是说允许多个版本的dll同时存在,详细的说明请参考MSDN上的"强名称"的帮助.
    至于COM组件是不是一定要用到它,我想应该是,因为COM的调用方式和强名称很类似使用的是GUID.
    因为没有在c#中使用过COM所以说得不知道对不对,具体你可以再查查资料,问问高人.