同样的VS2003环境,在2000下和在XP编译出来的结果不一样

    最近写一个.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之间的互操作有问题了,不知道微软是衰老了还是怎么的,反应越来越慢了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值