簡體   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