none
关于.net4.0更新补丁的疑问,为什么KB2478663中system.dll比KB2468871还旧,该更新哪个?

    问题

  • 关于.net4.0更新补丁的疑问,为什么KB2478663中system.dll比KB2468871还旧,该更新哪个?
    我的程序中使用到了Jint2.4。在运行时报错如下:

    有关调用实时(JIT)调试而不是此对话框的详细信息,
    请参见此消息的结尾。

    ************** 异常文本 **************
    System.IO.FileLoadException: 未能加载文件或程序集“System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”或它的某一个依赖项。给定程序集名称或基本代码无效。 (异常来自 HRESULT:0x80131047)
    文件名:“System, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”
       在 Jint.Engine..ctor(Action`1 options)
       在 Jint.Engine..ctor()
       在 JintTest.MainForm.btnExecute_Click(Object sender, EventArgs e) 位置 d:\myDemo\visual studio 2013\GSP\JintTest\MainForm.cs:行号 28
       在 System.Windows.Forms.Control.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnClick(EventArgs e)
       在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       在 System.Windows.Forms.Control.WndProc(Message& m)
       在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
       在 System.Windows.Forms.Button.WndProc(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    警告: 程序集绑定日志记录被关闭。
    要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
    注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
    要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。



    ************** 已加载的程序集 **************
    mscorlib
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 (RTMRel.030319-0100)
        基本代码: file:///C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
    ----------------------------------------
    JintTest
        程序集版本: 1.0.0.0
        Win32 版本: 1.0.0.0
        基本代码: file:///C:/myDemo/Debug/JintTest.exe
    ----------------------------------------
    System.Windows.Forms
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 built by: RTMRel
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 built by: RTMRel
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 built by: RTMRel
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Configuration
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 (RTMRel.030319-0100)
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
    ----------------------------------------
    System.Xml
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 built by: RTMRel
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
    ----------------------------------------
    Jint
        程序集版本: 2.4.0.0
        Win32 版本: 2.4.0
        基本代码: file:///C:/myDemo/Debug/Jint.DLL
    ----------------------------------------
    System.Windows.Forms.resources
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 built by: RTMRel
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
    ----------------------------------------
    mscorlib.resources
        程序集版本: 4.0.0.0
        Win32 版本: 4.0.30319.1 (RTMRel.030319-0100)
        基本代码: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/mscorlib.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/mscorlib.resources.dll
    ----------------------------------------

    ************** JIT 调试 **************
    要启用实时(JIT)调试,
    该应用程序或计算机的 .config 文件(machine.config)的 system.windows.forms 节中必须设置
    jitDebugging 值。
    编译应用程序时还必须启用
    调试。

    例如: 

    <configuration>
        <system.windows.forms jitDebugging="true" />
    </configuration>

    启用 JIT 调试后,任何未经处理的异常
    都将被发送到在此计算机上注册的 JIT 调试器,
    而不是由此对话框处理。

    根据网上帖子,更新了微软net4.0的补丁KB2468871后问题解决,由于客户的机器不能联网更新,我需要将该补丁发给客户,但从微软网站搜索后发现后续还有一个KB2478663补丁,该补丁较KB2468871晚一天,里面也包含了system.dll,但版本是4.0.30319.232,较KB2468871中版本(4.0.30319.233)要低。难道是KB2468871中该DLL有问题,KB2478663又撤回去了?我该更新哪个呢?
    2016年2月17日 2:03

全部回复

  • 你好,

    https://support.microsoft.com/zh-cn/kb/2468871

    https://support.microsoft.com/zh-cn/kb/2478663

    根据这两个链接来看的,确实是KB2468871 的system.dll要高。但是他们修复的问题不一样,你可以根据你的需求更新补丁版本。具体补丁修复的问题,请参考上面的链接。

    Best regards,

    Cole Wu

    2016年2月17日 4:28
    版主
  • 非常感谢您的关注。其实我的本意只为解决Jint2.4调用问题。上午经过摸索已经验证,单纯打KB2478663无法解决我的问题。只好再打KB2468871,结果悲剧了,死活打不上,查看Log,里面有如下信息:

    02/17/16 11:51:12 DDSet_Status: Attempting to copy C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\System.Xml.Serialization.dll to C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\GAC30699\System.Xml.Serialization.dll
    02/17/16 11:51:12 DDSet_Error: Could not copy file: C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\System.Xml.Serialization.dll
    02/17/16 11:51:12 DDSet_Error: CacheGACAssembly failed
    02/17/16 11:51:12 DDSet_Exit: CacheGACAssembly ended with return value 1603
    MSI (s) (84:AC) [11:51:12:463]: User policy value 'DisableRollback' is 0
    MSI (s) (84:AC) [11:51:12:463]: Machine policy value 'DisableRollback' is 0
    操作结束 11:51:12: InstallFinalize。返回值 3。
    MSI (s) (84:AC) [11:51:12:573]: Executing op: Header(Signature=1397708873,Version=405,Timestamp=1213292123,LangId=0,Platform=0,ScriptType=2,ScriptMajorVersion=21,ScriptMinorVersion=4,ScriptAttributes=1)
    MSI (s) (84:AC) [11:51:12:573]: Executing op: DialogInfo(Type=0,Argument=0)
    MSI (s) (84:AC) [11:51:12:573]: Executing op: DialogInfo(Type=1,Argument=Microsoft .NET Framework 4 Client Profile)
    MSI (s) (84:AC) [11:51:12:583]: Executing op: RollbackInfo(,RollbackAction=Rollback,RollbackDescription=正在回滚操作:,RollbackTemplate=[1],CleanupAction=RollbackCleanup,CleanupDescription=正在删除备份文件,CleanupTemplate=文件: [1])
    MSI (s) (84:AC) [11:51:12:593]: Executing op: ActionStart(Name=CA_CacheGACAssemblyDeferred.3643236F_FC70_11D3_A536_0090278A1BB8,,)

    从网上搜了下,有人遇到过类似问题(https://social.msdn.microsoft.com/Forums/en-US/ca1a1d13-5003-4af6-b8bf-65661aaff79d/installation-of-kb24688710x80070643?forum=netfxsetup),从别的机器复制一个System.Xml.Serialization.dll后终于打上补丁了。看来这个KB2468871的确有重大问题,一旦失败,不但会将部分DLL从GAC清掉,而且移动到别的目录,回滚动作不彻底,这个似乎在KB2478663中有描述。至于System.dll问题,我猜测是KB2468871有BUG,否则微软不会第二天就发补丁撤回到前一个版本。


    2016年2月17日 5:36