最近写一个.net程序需要调用到以前的COM+,由于这个组件用到了ADO中的类,在调用它的时候.net也要生成相应的ADODB的interop代理,开始是在2000下编译的,ADO组件由于加入了全局缓存所以没有生成本地代理,这样没有任何问题。后来重装了XP,再次编译程序的时候发现interop.ADODB.dll被复制到本地了,强名称属性也变成了false(而且无法更改)?
开始也没有在意,编译没有出现错误,可是运行的时候麻烦就来了,method not found。。。,not found 的是一个返回ADODB.Recordset的方法,显然是ADODB.dll的问题,于是用ildasm打开程序集,发现2000下编译出的程序和xp下编译出的程序不同!在引用组件的部分:
2000下:
.assembly extern ADODB
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 7:0:3300:0
}
xp下:
.assembly extern Interop.ADODB
{
.ver 2:7:0:0
}
显然xp下没有使用全局程序集中的adodb.dll,而是把它当成一个COM来引用的
于是我从开发环境中删掉了这个代理,想强制使用全局缓存中的adodb.dll,编译也通过了,可是运行时错误又来了:找不到程序集 interop.ADODB.dll 。
偶真是百思不得其解,强烈的郁闷中只好又装回了2000。
早就听说.net和com之间的互操作有问题了,不知道微软是衰老了还是怎么的,反应越来越慢了。。。