首页 >数据库 >mysql教程 >混合模式程序集是针对'v2.0.50727”版的运行时生成的,在没有配

混合模式程序集是针对'v2.0.50727”版的运行时生成的,在没有配

WBOY
WBOY原创
2016-06-07 15:43:401264浏览
<p class="intro">今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中</p> <p> 今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常:</p> <p>  </p> <blockquote> <br> <p><span><span>混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集</span></span></p> </blockquote> <p>  </p> <p> 其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,<span><span>就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,2010年4月18日发布的)</span></span>,而目前官方也没有给出最新的.NET4的数据访问支持。<br> <br> </p> <p> 既然出现这个问题,那肯定是上GOOGLE搜索解决方案,毕竟微软不可能因为升级到了.NET4.0的程序无法访问.NET2.0的程序集吧。后来在著名的stackoverflow.com上果然找到了解决方案,就是在app.config中添加一个配置节:<span>startup</span></p> <p> <span><span><code><</code><code><code><span><span>startup</span></span></code></span>startup<span><code><span>useLegacyV2RuntimeActivationPolicy</span></code></code><code>=</code> <code><span>"true"</span></code><code><code>></code>useLegacyV2RuntimeActivationPolicy</span></span><code></code></p>"true"<p><span><span><code><</code><code><span><span>supportedRuntime</span></span></code> <span> <code><span>version</span></code><code>=</code><code><span>"v4.0"</span></code><code><code>/></code></span>supportedRuntime</span> </p> <code><p>version<span></span></p></code><span><code><span>"v4.0"<span></span></span></code><code></</code><code><span><span>startup</span></span></code><code>></code></span> <p></p> <p><code></code></p> <p>startup</p> <p></p> <blockquote> <br><p><span></span> </p>  </blockquote> <p>  </p> <blockquote> 这段配置节的意思是(参考自MSDN,具体地址:http://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx):<br> <p>  <span> </span> </p> </blockquote> <p>启用 .NET Framework 2.0 版 运行时激活策略,这是通过使用最新支持的运行时加载所有程序集。<br></p> <p> </p>  <p> </p> <p> </p>注意:由于config配置文件的特性,如果在config配置文件中存在configdivs节点,则必须将configdivs放在一个,否则会引发异常:<p>配置系统未能初始化</p> <p> </p> <p> </p>  <blockquote> <br>  <p> <span>  </span> </p> 在原来.NET2.0,.NET3.5的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集继续拧互操作的时候就会出现上面所说的兼容性问题。</blockquote> <p>  </p> <p> 通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:</p> <p>  </p> <p> </p> <p></p>使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4 通过使用公共语言运行时 (CLR) 版本 4 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4 的最高 CLR 版本所创建的程序集。<p></p> <p> </p>  <p> <span>  </span> </p>  <p> </p> 现在如果当程序在.NET4.0环境下要使用.NET2.0及.NET3.5的程序时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为“v4.0”,表示使用.NET4.0运行时来运行程序。<p> <span>  </span> </p>  <p> </p>  <p> <span> </span>有关更多startup及其子级可以查看MSDN:</p> <br>   startup:http://msdn.microsoft.com/zh-cn/library/bbx34a2h.aspx   supportedRuntime:http://msdn.microsoft.com/zh-cn/library/w4atty68.aspx
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn