我的共享装配件里调用了一个系统的dll(CDOsys.dll)这玩意应该是个私有的装配件,因为他在Debug目录创建了一个副本(Interop.CDO.dll)
并且在IDE里显示没有强名,最后导致了我没法编译……如果我只做成私有的装配件,就没问题,一切正常,我现在要做成共享的,咋办?能把它变成共享的吗?或者是还有其他的办法?希望有经验的兄弟指点一下

解决方案 »

  1.   

    或者那个不是私有装配件Interop.CDO.dll也只是生成的代理组件如果是这样的话这个代理组件为什么不能被包含在我的那个装配件里?
      

  2.   

    回复人: epimetheus(阿戈尔) ( ) 信誉:100  2005-04-18 17:48:00  得分: 0  
     
     
       注册到GAC中。
      
     
    你试试看,没有源代码,怎么注册到GAC中?
      

  3.   

    VS.NET自动生成的dll确实没法设置强名
    不过你可以使用命令行工具Type Library Importer (Tlbimp.exe)使用/keyfile或/keycontainer命令行开关:
    tlbimp CDOsys.dll /out:Interop.CDO.dll /keyfile:sn.snk
      

  4.   

    速马老兄好像不行啊……这样生成的连本来有强名的ADODB现在也没强名了:(而且查了一下资料,Tlbimp是不是只能用在COM上阿?CDOsys好像不是个COM :(
      

  5.   

    CDO是COM组件,不然VS.NET也不会给你生成Interop.CDO.dll
    你这里和ADODB有什么关系?
      

  6.   

    因为CDO里引用了ADODB阿生成的代理后又会自动生成一个ADODOCDO确实可以给它强名但现在生成的这个ADODB却没有强名了-_-!不过以前是ADODB有强名,而且我在高速缓冲里能看到它
      

  7.   

    嗯,这样,那么先按照我的那个方法为CDO生成强名的Interop.CDO.dll
    使用Gacutil /i Interop.CDO.dll注册这个dll到全局缓冲
    到VS.NET引用这个dll(此时这个dll不会被复制到本地,因为其具有强名称)ADODB.dll并不是COM,不要管它,也不需要interop过程
      

  8.   

    此时这个dll不会被复制到本地,因为其具有强名称
    >>>
    此时这个dll不会被复制到本地,因为它已被注册到全局缓冲
      

  9.   

    CSDN刚才咋了:(
    我试着单独引入ADODB现在都有强名了但是把编译好assemblyinfo.dll模块后编译我的主单元csc /t:library /addmodule:assemblyinfo.dll MMail2.cs
    MMail2.cs(225,4): error CS0246: The type or namespace name 'ADODB' could not be
            found (are you missing a using directive or an assembly reference?)MMail2.cs(180,4): error CS0246: The type or namespace name 'MCDO' could not be
            found (are you missing a using directive or an assembly reference?)
    :(
      

  10.   

    回复人: Sunmast(速马/Maybe I'm Amazed) ( ) 信誉:125  2005-04-19 11:44:00  得分: 0  
     
     
       嗯,这样,那么先按照我的那个方法为CDO生成强名的Interop.CDO.dll
    使用Gacutil /i Interop.CDO.dll注册这个dll到全局缓冲
    到VS.NET引用这个dll(此时这个dll不会被复制到本地,因为其具有强名称)ADODB.dll并不是COM,不要管它,也不需要interop过程
      有道理,试下 
      

  11.   

    速马问个问题
    搞不好俺犯了个低级错误,跟CDO这玩意没关系 
    做共享装配件的时候,如果有多个组件,怎么统一起来?比如说B引用了A
    想把B做成共享的,这是A应该怎么处理? 不应该说组件
    应该说装配件
    A和B都是装配件 私有的没啥问题
    直接用就行了
    如果我想把B做成共享的
    A怎么办?他还是B的私有装配件?还是也要做成共享的?还是其他?
      

  12.   

    我测试了一下简单的两个library也抱错:(越来越感觉是低级错误,哪位知道给俺醍醐灌顶一下速马老兄呢?咋不关注俺了咧?
    using System;namespace Class1
    {
    public class Class1
    {
    public int i;
    public string s;
    public int a;
    public Class1()
    { } public void AAA()
    {
    i=100;
    s="111111111111111";
    a=50;
    } public void AAA(int ii,string ss,int aa)
    {
    i=ii;
    s=ss;
    a=aa;
    } }
    }==========================================================================================using System; namespace Class2
    {
    public class Class2
    {
    public Class2()
    { }
    public void BBB()
    {
    Class1.Class1 c=new Class1.Class1();
    c.AAA();
             System.Windows.Forms.MessageBox.Show(c.s);
    c.AAA(50,"AAAAA",1000);
    System.Windows.Forms.MessageBox.Show(c.s);
    }
    }
    }
    就这样,class1.dll 和 class2.dll 竟然也不行……我的操作步骤是1.SN 生成一个强名2.修改AssemblyInfo.cs,设置强名3.把AssemblyInfo.cs编译成模块4.把AssemblyInfo.dll加到Class2.cs并生成Class2.dll
    Class1步骤也是如此,并且没啥问题但是class2引用了Class1,所以编译的时候又说找不到Class1,我把Class1设成共享的也不行晕死了到底哪里不对啊?
      

  13.   

    如果程序集B引用了A
    要把B设置为强名
    那么得先把A设置为强名见《.NET框架程序设计(修订版)》
      

  14.   

    如果程序集B引用了A
    要把B设置为强名
    那么得先把A设置为强名================================================我就是这么做的阿……可还是不行,总是提示The type or namespace name 'XXX'could not be
            found (are you missing a using directive or an assembly reference?)这样的错误
    还有什么其他值得注意的?
      

  15.   

    我现在觉得这个根本就不是强名的问题
    你的编译器设置不对(为什么不用更方便的VS.NET)
      

  16.   

    编译器设置?更方便的VS.NET?那些命令行的功能能通过VS.NET完成吗?比如说模块的加载,安装到高速缓冲……
      

  17.   

    VS.NET自己不能完成,但是你可一给他写编译前事件和编译后事件处理脚本完成
      

  18.   

    哈哈哈哈哈哈终于搞定了用命令行生成强名然后在VS.NET里编译成装配件再用命令行加入到缓冲区最后再用命令行转成带有COM Services的装配件在VS和VB下调用成功操,我真TMD是个天才
    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈