关于装配件的一个问题,有经验的兄弟进来讨论一下

chijingde 2005-04-18 05:47:38
我的共享装配件里调用了一个系统的dll(CDOsys.dll)

这玩意应该是个私有的装配件,

因为他在Debug目录创建了一个副本(Interop.CDO.dll)
并且在IDE里显示没有强名,最后导致了我没法编译……

如果我只做成私有的装配件,就没问题,一切正常,我现在要做成共享的,咋办?

能把它变成共享的吗?或者是还有其他的办法?

希望有经验的兄弟指点一下


...全文
201 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovvver 2005-04-19
  • 打赏
  • 举报
回复
学习啊,帮顶一下~
chijingde 2005-04-19
  • 打赏
  • 举报
回复
还是不行……

一样的错误……
chijingde 2005-04-19
  • 打赏
  • 举报
回复
回复人: 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过程




有道理,试下
chijingde 2005-04-19
  • 打赏
  • 举报
回复
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?)


:(
速马 2005-04-19
  • 打赏
  • 举报
回复
此时这个dll不会被复制到本地,因为其具有强名称
>>>
此时这个dll不会被复制到本地,因为它已被注册到全局缓冲
速马 2005-04-19
  • 打赏
  • 举报
回复
嗯,这样,那么先按照我的那个方法为CDO生成强名的Interop.CDO.dll
使用Gacutil /i Interop.CDO.dll注册这个dll到全局缓冲
到VS.NET引用这个dll(此时这个dll不会被复制到本地,因为其具有强名称)

ADODB.dll并不是COM,不要管它,也不需要interop过程
chijingde 2005-04-19
  • 打赏
  • 举报
回复
因为CDO里引用了ADODB阿

生成的代理后又会自动生成一个ADODO

CDO确实可以给它强名

但现在生成的这个ADODB却没有强名了-_-!

不过以前是ADODB有强名,而且我在高速缓冲里能看到它
速马 2005-04-19
  • 打赏
  • 举报
回复
CDO是COM组件,不然VS.NET也不会给你生成Interop.CDO.dll
你这里和ADODB有什么关系?
chijingde 2005-04-19
  • 打赏
  • 举报
回复
速马老兄

好像不行啊……

这样生成的连本来有强名的ADODB现在也没强名了:(

而且查了一下资料,Tlbimp是不是只能用在COM上阿?

CDOsys好像不是个COM :(
chijingde 2005-04-19
  • 打赏
  • 举报
回复
速马老兄

十分感谢,哈哈哈

下次到D版,我请你吃鸡腿 :D




chijingde 2005-04-19
  • 打赏
  • 举报
回复
哈哈哈哈哈哈

终于搞定了

用命令行生成强名

然后在VS.NET里编译成装配件

再用命令行加入到缓冲区

最后再用命令行转成带有COM Services的装配件

在VS和VB下调用成功

操,我真TMD是个天才


哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
速马 2005-04-19
  • 打赏
  • 举报
回复
VS.NET自己不能完成,但是你可一给他写编译前事件和编译后事件处理脚本完成
chijingde 2005-04-19
  • 打赏
  • 举报
回复
编译器设置?

更方便的VS.NET?

那些命令行的功能能通过VS.NET完成吗?比如说模块的加载,安装到高速缓冲……
速马 2005-04-19
  • 打赏
  • 举报
回复
我现在觉得这个根本就不是强名的问题
你的编译器设置不对(为什么不用更方便的VS.NET)
chijingde 2005-04-19
  • 打赏
  • 举报
回复
如果程序集B引用了A
要把B设置为强名
那么得先把A设置为强名

================================================

我就是这么做的阿……

可还是不行,总是提示The type or namespace name 'XXX'could not be
found (are you missing a using directive or an assembly reference?)

这样的错误
还有什么其他值得注意的?
速马 2005-04-19
  • 打赏
  • 举报
回复
如果程序集B引用了A
要把B设置为强名
那么得先把A设置为强名

见《.NET框架程序设计(修订版)》
chijingde 2005-04-19
  • 打赏
  • 举报
回复
我测试了一下

简单的两个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设成共享的也不行

晕死了

到底哪里不对啊?
chijingde 2005-04-19
  • 打赏
  • 举报
回复
速马

问个问题
搞不好俺犯了个低级错误,跟CDO这玩意没关系


做共享装配件的时候,如果有多个组件,怎么统一起来?

比如说B引用了A
想把B做成共享的,这是A应该怎么处理?

不应该说组件
应该说装配件
A和B都是装配件

私有的没啥问题
直接用就行了
如果我想把B做成共享的
A怎么办?他还是B的私有装配件?还是也要做成共享的?还是其他?
速马 2005-04-19
  • 打赏
  • 举报
回复
没道理嗯,我这里是对的
chijingde 2005-04-19
  • 打赏
  • 举报
回复


回去试一下

先谢了
加载更多回复(6)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧