2010-12-08 18 views
4

.NET 4.0で構築されたWindowsフォームプロジェクトがあります。また、.NET 2.0で構築されたDLL System.Data.SQLiteを指します。私のexeファイルが自分のマシン(Windows XP)に.NET Framework 4.0しかインストールしていないクライアントに配布されると、exeファイルがクラッシュします。.NET Framework 4.0と2.0を使用したアセンブリ

参照DLLをCLR 4.0に読み込むように強制するには(CLR 2.0を使用するように作成されていますが)、.NET Framework 2.0がインストールされていなくても実行できますか?

+2

あなたは何の例外を得るのですか?あなたのコードは正常に動作するはずです。 – SLaks

答えて

0

セットの.Net 4プロジェクトを右クリックして、ここでmsdn.microsoft.com/en-us/library/cc656912.aspx

を参照して、プロフィールを作成することが> Proeprties>タブ> [詳細コンパイルオプション>ターゲットフレームワークをコンパイルします。 。それは.NETクライアントに設定されていないことを確認してください>ちょうどネット4(フル)

編集に設定します。.NET Frameworkは、一般的には下位互換性があり、あなたはセットアップがここhttp://social.msdn.microsoft.com/forums/en-US/clr/thread/de5956f6-7a12-45d8-ae03-988ad8434a17

を参照して、ランタイムをサポートすることができますクラッシュするEXEに関しては、メモリダンプを取ってWinDBGを使用したいと思うかもしれないので、これは2番目のチャンス例外(デバッガが処理できない例外)だと思います!メモリダンプを分析して、もちろん、2番目のチャンスの例外メッセージは、System.Data.SQLiteを問題のDLLとしてリストしています。

+0

それは役に立たないでしょう。 – SLaks

+0

あなたはどのように知っていますか?とにかく私はWinDBGのものを含めるように編集しました:) –

+1

クライアントとフルプロファイルは例外を引き起こすことはできません。 – SLaks

4

あなたのapp.config(more info)にuseLegacyV2RuntimeActivationPolicytrueを設定してください。

.NET4(特にEF4)のSQLiteに関する詳細がありますon my blogです。

+0

素敵な情報、私はSQLiteは純粋なマネージドコードだと思った。これが私のクライアントの問題を解決できることを願っています。試してみるよ。 –

1

私はEntityFramework(私は最後のリリースがわからない、EFより検討しているかもしれないと思う)とは対照的に、私はNHibernateのを使用しすぎたSQLiteの設定の問題を、持っていたジョン・

。ここに私のために現在働いているものがあります。

1)スティーブンさんの言うとおり、app.configを変更するだけでなく、以下のコメントの理由でランタイム・ディレクティブを追加します。

2)ビルドターゲットプラットフォームをニーズに合わせたdllにマッチさせます。 64xまたは86xのどちらでも動作しますが、AnyCpuはある種のマニフェスト例外を取得します。私は消耗しているので、x86を使用しています。

最新のリリース(4月と思われます)で依存関係を分離するために別のプロジェクトを作成することは、ある時点では役に立ちます。 XAMLデザイナーが幸せにならないので、Visual Studioを通してWPFのビューを多用することは期待しないでください。それは速くて甘いものですが、最新のリリースは簡単ではありません。

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> 
+0

...の中にすべてを置くと、アプリケーションの負荷で認識されます。 – lsalamon