2017-09-14 100 views
3

由于在14.9.2017上安装了Windows更新,因此在我们的发布版本中创建特定结构时出现问题。我注意到没有该更新的计算机上的编译代码按预期运行(“错误的开始:1.1.1990 ...”),在安装了有关更新的计算机上,代码无法正常工作(“错误的开始:1.1。 2000 ...“)。这发生在从4.x版开始的.NET Frameworks的所有版本中。Windows更新损坏.Net 4.x中的结构构造

class Program 
    { 
     static void Main(string[] args) 
     { 
      DateTime start1 = new DateTime(1990, 1, 1, 6, 0, 0); 
      DateTime end1 = new DateTime(2000, 1, 1, 6, 0, 0); 
      var r2 = new DateTimeRange(start1, end1); 
      var r3 = new Range<DateTime>(r2.From, r2.To); 
      Console.WriteLine($"Wrong start: {r3.From}, correct start: {start1}"); 
      Console.ReadLine(); 
     } 
    } 

    public struct DateTimeRange 
    { 
     private Range<DateTime> m_range; 

     public DateTimeRange(DateTime from, DateTime to) 
     { 
      m_range = new Range<DateTime>(from, to); 
     } 


     public DateTime From 
     { 
      get { return m_range.From; } 
     } 

     public DateTime To 
     { 
      get { return m_range.To; } 
     } 
    } 

    public struct Range<T> where T : struct 
    { 
     private T m_from; 
     private T m_to; 


     public Range(T from, T to) 
     { 
      m_from = from; 
      m_to = to; 
     } 


     public T From 
     { 
      get { return m_from; } 
     } 

     public T To 
     { 
      get { return m_to; } 
     } 
    } 
+0

定义“工作错误”。什么症状/错误? – DiskJunky

+0

该日期安装了哪些Windows更新? – AKX

+0

删除项目中的bin文件夹并重新编译。新的Bin文件夹将被创建。编译器无法识别对Framework的依赖,因此编译器不会自动更新所有对象。因此删除bin会强制编译器完全重新编译项目。 – jdweng

回答

3

我看到它,重新启动我的机器后。肯定会像更新中的bug一样嘎嘎。在我的机器上,我看到C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ corjit.dll,日期为9/6/17,9:23 CDT,版本4.7.2110.0。

该错误特定于x64抖动,仅在启用优化程序的发布版本中发生。它匹配我以前在抖动中看到的那种错误,过去的大多数优化器错误都与代码处理结构有关。

不幸的是,我很难表征bug,代码gen太强大,我发现的解决方法似乎没有在机器代码上做出足够的区别。但在其他周围航行这些类型的优化错误的典型方式:

using System.Runtime.CompilerServices; 
... 
    public DateTime From { 
     [MethodImpl(MethodImplOptions.NoInlining)] 
     get { return m_range.From; } 
    } 

其他变通办法迫使32位模式或回落至the legacy jitter。请report the bug,以便他们能解决它,让我知道如果你不想花时间,我会照顾它。

+1

感谢您的建议和帮助,我们报告了这个问题。提到的职责正在发挥作用,但我们希望一般情况下会得到解决。 –

+1

https://github.com/dotnet/coreclr/issues/14007 –