混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...

abc001nba 2012-05-08 09:30:58
今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常:


混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,2010年4月18日发布的),而目前官方也没有给出最新的.NET4的数据访问支持。

既然出现这个问题,那肯定是上GOOGLE搜索解决方案,毕竟微软不可能因为升级到了.NET4.0的程序无法访问.NET2.0的程序集吧。后来在著名的stackoverflow.com上果然找到了解决方案,就是在app.config中添加一个配置节:startup

<startup useLegacyV2RuntimeActivationPolicy="true">

<supportedRuntime version="v4.0"/>

</startup>





这段配置节的意思是(参考自MSDN,具体地址:http://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx):





启用 .NET Framework 2.0 版 运行时激活策略,这是通过使用最新支持的运行时加载所有程序集。




注意:由于config配置文件的特性,如果在config配置文件中存在configSections节点,则必须将configSections放在一个,否则会引发异常:配置系统未能初始化







在原来.NET2.0,.NET3.5的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集继续拧互操作的时候就会出现上面所说的兼容性问题。



通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:





使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4 通过使用公共语言运行时 (CLR) 版本 4 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4 的最高 CLR 版本所创建的程序集。






现在如果当程序在.NET4.0环境下要使用.NET2.0及.NET3.5的程序时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为“v4.0”,表示使用.NET4.0运行时来运行程序。







有关更多startup及其子级可以查看MSDN:



startup:http://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx



supportedRuntime:http://msdn.microsoft.com/zh-cn/library/w4atty68.aspx



原文:http://hi.baidu.com/mubingyun/blog/item/aa4c833d832d7ae03c6d97e4.html

...全文
1999 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lingoesforstudy 2012-08-29
  • 打赏
  • 举报
回复
在这个目录下C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\VWDExpress\ItemTemplatesCache\VisualBasic\2052\AppConfigurationInternal.zip
找到那个文件了,


<startup useLegacyV2RuntimeActivationPolicy="true">

<supportedRuntime version="v4.0"/>

</startup>

加进去了,但是还是不行啊,还是提示异常“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集”
Lingoesforstudy 2012-08-29
  • 打赏
  • 举报
回复
app.config

这个文件在哪
Lingoesforstudy 2012-08-29
  • 打赏
  • 举报
回复
app.config

这个文件在哪
277894613 2012-08-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

泪流满面。终于找到了解决方法
[/Quote]


如何解决的?
tulanglaoli 2012-08-05
  • 打赏
  • 举报
回复
泪流满面。终于找到了解决方法
Sunpire 2012-05-23
  • 打赏
  • 举报
回复
游北亮 2012-05-08
  • 打赏
  • 举报
回复
不错,暂时还没开发4.0程序
chenbaihao5 2012-05-08
  • 打赏
  • 举报
回复
我目前还没有遇到过这种情况
ycproc 2012-05-08
  • 打赏
  • 举报
回复

我目前还没有遇到过这种情况
“微信公众平台深度开发Java v2.0”系列课程共有6季,使用JAVA语言,系统讲解微信公众平台订阅号、服务号官方列出的全部功能接口,包括:自定义菜单、个性化菜单(按需定制菜单)、群发消息、客服消息(有限次消息推送)、模板消息接(无限次消息推送)、微信网页开发(微信WEB开发、微信游戏)、微信JSSDK开发、用户管理、获取用户基本信息、网页授权获取用户基本信息(通过WEB得到用户信息)、二维码(临时二维码、永久二维码)、事件推送、接收普通消息、被动回复用户消息,等知识点。 以及,针对微信公众号开发的服务端架构设计方案。课程以微信公众号开发视角,讲解JAVA开发微信公众号所需的框架、第三方工具。 购买套餐还赠送经典微信开发课程——[微信公众号_独立知识点]环境搭建。该课程针对各种复杂的网络环境,讲解如何构建开发环境,已解决“没有服务器”、“没有固定IP”等开发者遇到的窘境。 课程采用独立知识点讲解,一个知识点,一组课程,真正做到“简单、高效、”以短的时间、实现的学习。更多课程信息请访问CSDN。网址:http://edu.csdn.net/lecturer/631 “微信公众平台企业号开发Java”陆续上线。详情 qq2326321088

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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