如何保持.NET 4.0的行为,如果安装了.NET 4.5吗?(How to keep .Net 4

2019-07-30 09:31发布

我们有面向.NET Framework 4.0中一个Windows窗体应用程序。 安装.Net框架4.5后,应用程序开始崩溃。 我们必须要调查的崩溃,我们将最有可能不得不解决就在我们身边的事情。 但是,有没有我们可以打开,以保持旧的行为,直到我们准备使用.NET 4.5的设置?


更新2012年7月12日:我们发现,使我们的应用程序崩溃的重大更改:给定一个System.Threading.Timer,与已经关闭的句柄调用Dispose(WaitHandle的)时,则计时器尝试信号的WaitHandle的它抛出一个异常。 在.NET 4.0实现定时器的是宽容到4.5,但不是。

没有站在我们这一边的错误; 我们没有任何充分的理由给它一个封闭的手柄,使我们就解决这个问题......直到我们找到另一个错误......

Answer 1:

但是,有没有我们可以打开,以保持旧的行为,直到我们准备使用.NET 4.5的设置?

号.NET 4.5是就地更换的.NET 4.当你安装了它,你就有效的新框架运行。

一般情况下,它应该是完全向后兼容,但也有一些重大的变动 。

不幸的是,这将意味着你(和其他人)将需要测试并修复这两个框架的问题,如果你想支持安装4.5和没有安装4.5的机器上运行。 幸运的是,重大更改通常都非同一般,边缘情况,所以它不太可能在大多数情况下,以影响大多数用户。



Answer 2:

我讨论过这个通过电子邮件与原来的问题的海报 - “狡猾”。 狡猾的感谢帮助调查。 事实证明,.NET4和.NET4.5行为的处置(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);
    }


文章来源: How to keep .Net 4.0 behavior if .Net 4.5 is installed?
标签: .net .net-4.5