繁体   English   中英

带有使用2.0的程序集的.NET Framework 4.0

[英].NET Framework 4.0 with assemblies using 2.0

我有一个在.NET 4.0中构建的Windows窗体项目。 它指的是一个用.NET 2.0构建的DLL System.Data.SQLite。 当我的exe文件部署到我的客户端,他只在他的机器(Windows XP)中安装.NET Framework 4.0时,exe崩溃了。

如何强制EXE将引用的DLL加载到CLR 4.0中(虽然它是为了使用CLR 2.0而构建的),这样如果没有安装.NET Framework 2.0,它仍然可以运行?

在app.config useLegacyV2RuntimeActivationPolicy设置为true更多信息 )。

在博客上有关于.NET4上的SQLite(特别是EF4)的更多信息。

约翰

我也遇到过配置SQLite的问题,我使用NHibernate而不是EntityFramework(我认为最后一个版本可能更多地考虑了EF,不确定)。 这是目前适合我的。

1)修改app.config作为斯蒂芬说,但也在下面的评论中添加运行时指令。

2)首先将您的构建目标平台与满足您需求的dll相匹配。 64x或86x都可以工作,但AnyCpu会出现某种明显异常。 我不情愿地使用x86,因为它更安全,并没有明显影响我正在做的任何事情。

您甚至可能会发现在某些时候制作单独的项目来隔离最新版本中的依赖性麻烦(我认为是4月份)。 不要期望通过Visual Studio对任何WPF视图做很多事情,因为XAML设计师不会感到高兴。 一旦你开始它就会快速而甜蜜,但最新版本并非毫无疑问。

HTH,
Berryl

完整的应用程序配置添加

<!-- SQLite requires this mixed mode load setting-->
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>

<runtime>
    <loadFromRemoteSources enabled="true"/>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

    <!-- SQLite is built with older System.Data so we need this redirect -->       
    <dependentAssembly>
        <assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089"/>
        <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
    </dependentAssembly>

    </assemblyBinding>
</runtime>

将.Net 4设为完整档案,请点击此处msdn.microsoft.com/en-us/library/cc656912.aspx

右键单击项目> Proeprties>编译选项卡>高级编译选项>目标框架。 确保它未设置为.Net Client>将其设置为.Net 4(完整)

编辑:.NET Framework一般是向后兼容的,您可以设置支持的运行时,请参见http://social.msdn.microsoft.com/forums/en-US/clr/thread/de5956f6-7a12-45d8-ae03-988ad8434a17

关于崩溃的EXE,我猜这是第二次机会异常(即调试器无法处理的异常),所以你可能想要一个内存转储并使用WinDBG来!分析内存转储并找出确切的原因,除非当然第二次机会异常消息列出System.Data.SQLite作为问题DLL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM