我在写的一个程序是用.net写com,因此生成程序集时要使用强名称。现在的问题是我在程序里要用到一个ocx控件(以前写好的),然而这个控件却没有强名称,在生成程序集的时候报告引用的程序集没有强名称。有什么解决办法?先谢谢了。

解决方案 »

  1.   

    首先,楼主以后不要说“用.net写com”,这句话不太对头
    这个好麻烦,大致这样吧
    比如你引用的是ADO组件,在添加引用之后会生成一个Interop.ADODB.DLL文件
    然后你用ildasm 反编译Interop.ADODB.DLL成il代码存到一个文本文件abc.il中
    然后再用sn.exe工具生成一个密钥对文件my.snk
    再然后用ilasm编译abc.il,同时用my.snk对其签名
    这样编译后,把新的dll文件覆盖掉原来的,就可以了
    在发布组件时,还要同时发布Interop.ADODB.DLL这个文件,要不然必须把这个文件放到你的程序集所在的目录才可以
      

  2.   

    如果有老的com的话可能不可以。因为没有元数据程序集不能引用。
      

  3.   

    是不是编译时出现的,是不是你没有加入 /DLL 选项
    ilasm /DLL /OUTPUT=Interop.Excel.dll /KEY=my.snk
    最好把那几个文件放到其它地方编译,要不然旧的Interop.Excel.dll已经存在的话,就不能输出新文件了
      

  4.   

    感谢  hzw66(胡先生) 的帮助.我按照 hzw66(胡先生) 的步骤做了之后,已经成功的对我说的那个ocx控件加入了强名称,并且在程序里引用他也可以看到他的强名称是"true".可是现在出现了这样一个问题:我在IDE的工具箱里"添加/移除项"时,IDE提示错误"不是Com服务器"和"反序列化对象不足"?
    这是什么原因?是因为这个重新编译出的dll没有注册吗?