2012-07-12 12 views
25

.NET Framework 4.0を対象とするWindowsフォームアプリケーションがあります。 .NET Framework 4.5をインストールすると、アプリケーションがクラッシュするようになります。クラッシュを調査しなければならないだろうし、おそらく私たちの側で問題を解決しなければならないだろう。しかし、私たちが.Net 4.5を使用する準備が整うまで、古い動作を維持するための設定がありますか?.Net 4.5がインストールされている場合.Net 4.0動作を維持する方法?


アップデート2012年7月12日: 私たちは、クラッシュに我々のアプリケーションの原因となる破壊の変更が見つかりました:System.Threading.Timerを考えると、すでにされているハンドルを廃棄(WaitHandle)を呼び出すときタイマーは例外をスローするWaitHandleを通知しようとします。タイマーの.Net 4.0実装はこれに寛容でしたが、4.5はそうではありませんでした。

Google側にバグがあります。閉じたハンドルを付ける正当な理由はありませんので、ただ修正してから別のバグを見つけるまで...

+0

プロジェクトは「.NET Framework 4.0」に設定されていますか? –

+0

@LeonCullens:そうです。 – Sylvain

+1

@Sly私は.NET Framework互換チームのメンバーです。あなたは私が見てみることができるように、私はMicrosoftのドットコムのnetfx45compatのreproを私に送ることができますか? – Varun

答えて

29

しかし、私たちが.Net 4.5を使用する準備が整うまで、古い動作?

いいえ.Net 4.5は、.NET 4のインプレースでの置き換えです。インストールすると、新しいフレームワークで効果的に動作します。

一般に、完全に下位互換性がありますが、few breaking changesがあります。

残念ながら、これは、4.5がインストールされ、4.5がインストールされていないマシンでの実行をサポートしたい場合、両方のフレームワークで問題をテストして修正する必要があることを意味します。幸いなことに、改ざんの変化は一般的にすべて異常なエッジケースなので、ほとんどのシナリオでほとんどのユーザーに影響を及ぼす可能性は低いです。

6

私は元の質問ポスター「Sly」で電子メールでこれを説明しました。調査を手伝ってくれてありがとうSly。 .NET4と.NET4.5はDispose(waithandle)APIと同じように動作することが判明しました。したがって、この問題は.NET4.5とは無関係です。

static void Main(string[] args) 
    { 
     System.Threading.Timer timer = new System.Threading.Timer(new System.Threading.TimerCallback(blah)); 
     System.Threading.EventWaitHandle eventWaitHandle = new System.Threading.EventWaitHandle(true, System.Threading.EventResetMode.ManualReset); 

     eventWaitHandle.Dispose(); 
     System.Threading.Thread.Sleep(2000); 
     timer.Dispose(eventWaitHandle); 
    } 

    private static void blah(object state) 
    { 
     Console.WriteLine(40); 
    } 
関連する問題