簡體   English   中英

Windows更新破壞了.Net 4.x中的結構構造

[英]Windows update corrupts struct construction in .Net 4.x

自從14.9.2017安裝Windows更新以來,我們在發布版本中創建某些結構時遇到了問題。 我注意到沒有更新的計算機上的編譯代碼按預期運行(“錯誤的啟動:1.1.1990 ...”),在安裝了相關更新的計算機上,代碼無法正常工作(“錯誤的啟動:1.1。 2000 ...“)。 從版本4.x開始,所有版本的.NET框架都會發生這種情況。

 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; }
        }
    }

重新啟動機器后,我看到了它。 肯定會像更新中的bug那樣嘎嘎作響。 在我的機器上,我看到C:\\ Windows \\ Microsoft.NET \\ Framework64 \\ v4.0.30319 \\ corjit.dll,日期為9/6/17,上午9:23 CDT,版本4.7.2110.0。

該錯誤特定於x64抖動,僅在啟用了優化程序的Release版本中發生。 它匹配我之前在抖動中看到的那種錯誤,過去大多數優化錯誤都與代碼處理結構有關。

不幸的是,我很難描述錯誤,代碼生成太強大了,我發現的解決方法似乎沒有在機器代碼中乍看之下產生足夠的差異。 但是否則是繞過這些優化器錯誤的典型方式:

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

其他解決方法是強制32位模式或回退到傳統抖動 報告錯誤,以便他們可以修復它,如果您不想花時間讓我知道,我會照顧它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM