如果安装了.Net 4.5,如何保持.Net 4.0的行为?

Syl*_*ain 25 .net .net-4.5

我们有一个针对.Net Framework 4.0的Windows窗体应用程序.安装.Net Framework 4.5后,应用程序开始崩溃.我们将不得不调查崩溃事件,我们很可能必须解决问题.但是,在我们准备好使用.Net 4.5之前,是否有一个设置可以保持旧的行为?


更新07/12/2012: 我们发现导致应用程序崩溃的重大更改:给定System.Threading.Timer,当使用已经关闭的句柄调用Dispose(WaitHandle)时,Timer会尝试发出WaitHandle信号这引发了一个例外.Timer的.Net 4.0实现是容忍的,但4.5不是.

我们这边有一个错误; 我们没有任何理由给它一个封闭的句柄,所以我们只是解决这个问题...直到我们发现另一个错误...

Ree*_*sey 29

但是,在我们准备好使用.Net 4.5之前,是否有一个设置可以保持旧的行为?

.NET 4.5是.NET 4的就地替代品.当您安装它时,您将有效地运行新框架.

一般来说,它应该完全向后兼容,但有一些重大变化.

不幸的是,这意味着如果你想支持在安装了4.5并且没有安装4.5的机器上运行,你(以及其他所有人)将需要测试和修复两个框架上的问题.幸运的是,突破性变化通常都是不寻常的边缘情况,因此在大多数情况下它不太可能影响大多数用户.


Var*_*run 6

我通过电子邮件与原始问题海报 - "狡猾"进行了讨论.谢谢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);
    }
Run Code Online (Sandbox Code Playgroud)