如果安装.Net 4.5,如何保持.net 4.0行为?
问题描述:
我们有一个面向.Net Framework 4.0的Windows Form应用程序。安装.Net Framework 4.5后,应用程序开始崩溃。我们将不得不调查崩溃,我们很可能不得不解决我们的问题。但是,在我们准备使用.Net 4.5之前,我们可以打开一个设置来保留旧的行为吗?如果安装.Net 4.5,如何保持.net 4.0行为?
更新2012年7月12日: 我们发现,使我们的应用程序崩溃的重大更改:给定一个System.Threading.Timer,与手柄调用Dispose(WaitHandle的)时已是关闭,那么Timer会尝试发出抛出异常的WaitHandle信号。 Timer的.Net 4.0实现可以容忍,但4.5不是。
我们这边有一个错误;我们没有任何理由给它一个封闭的句柄,所以我们只是修复...直到我们发现另一个bug ...
答
但是有一个设置,我们可以打开以保持旧的行为,直到我们准备使用.Net 4.5?
编号.net 4.5是一个就地替换的.NET 4.当你安装它,你有效地运行在新的框架。
一般来说,它应该完全向后兼容,但有一个few breaking changes。
不幸的是,这意味着如果您想支持在安装了4.5且未安装4.5的计算机上运行,您(和其他人)将需要测试和修复这两个框架上的问题。幸运的是,突破性变化通常都是不寻常的,边缘情况,所以在大多数情况下不太可能影响大多数用户。
答
我通过电子邮件与原始问题海报 - “狡猾”讨论过。感谢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);
}
您的项目是否设置为'.NET Framework 4.0'? – 2012-07-12 18:24:34
@LeonCullens:是的。 – Sylvain 2012-07-12 18:27:30
@Sly我来自.NET Framework兼容团队。你可以给我一个微软网络公司的netfx45compat上的repro,以便我可以看看吗? – Varun 2012-10-16 15:20:41