我的共享装配件里调用了一个系统的dll(CDOsys.dll)这玩意应该是个私有的装配件,因为他在Debug目录创建了一个副本(Interop.CDO.dll)
并且在IDE里显示没有强名,最后导致了我没法编译……如果我只做成私有的装配件,就没问题,一切正常,我现在要做成共享的,咋办?能把它变成共享的吗?或者是还有其他的办法?希望有经验的兄弟指点一下
并且在IDE里显示没有强名,最后导致了我没法编译……如果我只做成私有的装配件,就没问题,一切正常,我现在要做成共享的,咋办?能把它变成共享的吗?或者是还有其他的办法?希望有经验的兄弟指点一下
注册到GAC中。
你试试看,没有源代码,怎么注册到GAC中?
不过你可以使用命令行工具Type Library Importer (Tlbimp.exe)使用/keyfile或/keycontainer命令行开关:
tlbimp CDOsys.dll /out:Interop.CDO.dll /keyfile:sn.snk
你这里和ADODB有什么关系?
使用Gacutil /i Interop.CDO.dll注册这个dll到全局缓冲
到VS.NET引用这个dll(此时这个dll不会被复制到本地,因为其具有强名称)ADODB.dll并不是COM,不要管它,也不需要interop过程
>>>
此时这个dll不会被复制到本地,因为它已被注册到全局缓冲
我试着单独引入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?)
:(
嗯,这样,那么先按照我的那个方法为CDO生成强名的Interop.CDO.dll
使用Gacutil /i Interop.CDO.dll注册这个dll到全局缓冲
到VS.NET引用这个dll(此时这个dll不会被复制到本地,因为其具有强名称)ADODB.dll并不是COM,不要管它,也不需要interop过程
有道理,试下
搞不好俺犯了个低级错误,跟CDO这玩意没关系
做共享装配件的时候,如果有多个组件,怎么统一起来?比如说B引用了A
想把B做成共享的,这是A应该怎么处理? 不应该说组件
应该说装配件
A和B都是装配件 私有的没啥问题
直接用就行了
如果我想把B做成共享的
A怎么办?他还是B的私有装配件?还是也要做成共享的?还是其他?
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设成共享的也不行晕死了到底哪里不对啊?
要把B设置为强名
那么得先把A设置为强名见《.NET框架程序设计(修订版)》
要把B设置为强名
那么得先把A设置为强名================================================我就是这么做的阿……可还是不行,总是提示The type or namespace name 'XXX'could not be
found (are you missing a using directive or an assembly reference?)这样的错误
还有什么其他值得注意的?
你的编译器设置不对(为什么不用更方便的VS.NET)
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈