这篇博客文章试图回答我们经常被问到的一些与内核热修复相关的问题。它主要为AX 2012、R2和R3编写,但许多概念与之前版本相关。它简要介绍了其他类型的 AX 热修复,但主要是为了说明什么是内核热修复,以及它与其他类型的区别。本文也没有详细介绍热修复安装过程。
请参考以下链接,获取关于安装Dynamics AX各种不同版本热修复包的详细信息:
http://technet.microsoft.com/en-us/library/hh335183.aspx
http://support.microsoft.com/kb/893082
如果你对这个话题还有任何问题没有解答,请在下方留言,我们会尽力为你解答!
问1:什么是内核热修复?
内核热修复会更新所有AX组件的二进制源文件及其他支持文件。
因此,内核热修复也常被称为二进制热修复。内核修复可能更新的文件示例包括可执行文件(ax32.exe、ax32serv.exe)和汇编(Microsoft.Dynamics.AX.*.dll)。安装程序会用更新版本替换每个需要修补的文件。
问2:什么是应用热修复?
应用程序(X++)修复时会更新AOT中的对象。
它可以在 SYP、GLP、FPP 和 SLP 层(为 Microsoft 代码保留的层)进行更新。这些更改在AX 2012及以后版本的AX模型存储中完成。
问3:这两种修复方式的主要区别是什么?
核心修复总是累积的。
每个新内核构建都包含之前发布的所有内核修复。
应用修复不是累积的。
应用修复通常只更新需要修复以解决特定问题的对象。然而,它可能还需要更新任何依赖关系(即AOT中“固定”对象引用且自身也被修复的额外对象)。
例外是累积更新或服务包,内核和应用补丁都是累积的。
问4:应用代码和内核之间的关系是什么?
AX 内核提供了支持应用(X++)代码执行的底层功能。
X++ 应用代码是一种解释型语言,X++ 解释器是 AX 内核的一部分。内核管理 X++ 执行过程中使用的资源,并执行垃圾回收以清理 X++ 对象及其他超出作用域的资源。
AX 内核主要使用 C++ 编写,但也包含 .NET 程序。它是 Microsoft 专有代码,不会对外发布,而 X++ 源代码则可见于 AOT。
X++编程语言包含系统类,这些实际上是内核类(即用C++实现的)。更多信息请参见 http://msdn.microsoft.com/en-us/library/aa853470.aspx
问题5:什么是混合解决方案?
混合修复包括内核和应用代码的补丁。
它类似于累积更新/汇总,但混合修复中的应用部分会针对特定问题,因此不是累积的。累积更新的另一个相似点是,你可以只应用内核,也可以只应用应用更新。
当应用代码变更涉及内核新功能时,混合修复会发布(或反之亦然)。然而,这些引用的实现方式确保了当仅安装应用或修复的内核部分时,应用程序仍能正常运行(详见Q8)。
问6:在应用内核热修复后,我需要更新自定义设置吗?
不,你不需要解决已修补的 Microsoft 代码和自定义应用代码之间的代码冲突。
人们常误以为应用内核热修复会导致与自定义 X++ 代码冲突。这只适用于应用修复,如上所述,修复会更新 X++ 底层(Microsoft 拥有的层)源代码,从而影响更高层的自定义。
Q7:我需要在生产环境中实现内核热修复吗?
在将内核热修复导入生产环境之前,你应始终按照正常流程测试 Dynamics AX 环境的变更。
每个修复在发布前都会进行测试,但它并不完全保证不会在客户环境中引入不希望的行为;每个环境都不同,硬件、配置设置、集成和自定义应用代码的组合各不相同,且在热修复发布前不可能测试所有组合。
您应始终采取适当措施,最大限度地降低停机风险,并确保修复后业务关键功能正常运行。
有关如何实现Dynamics AX热修复的更多信息,请参阅以下TechNet文章:
http://technet.microsoft.com/en-us/library/hh335183.aspx
问8:支持使用不同的内核和应用构建吗?
是的,支持应用和内核有不同的构建,但……它们必须是同一版本和服务包级别的。
我们的产品组确保在创建 AX 热修复时不会引入应用与内核之间的依赖关系。应用程序与内核构建之间的依赖只能在新产品版本和新服务包中引入(不能通过汇集或累积更新)。
我们也建议内核构建与应用构建相同或更高。应用内核更新通常比更新应用代码更简单,因此在应用累积更新的情况下,同时应用内核部分和应用部分是合理的。这也确保了你能充分利用任何混合修复,如上所述,这些修复需要内核和应用都更新才能完全正常运行。
示例:
| 应用构建 | 内核构建 | 有支持吗? |
| 5.0.593.0 (AX2009 RTM) | 5.0.1500.6491(AX 2009 SP1 RU8) | 否(应用构建是为RTM设计,内核为SP1) |
| 6.2.1000.4051 (AX2012 R2 CU7) | 6.2.1000.1437 (AX2012 R2 CU6) | 是的……但不推荐!(内核构建比应用构建低) |
| 6.3.164.0(AX2012 R3基础) | 6.3.1000.930 (AX2012 R3 最新内核*) | 是的(内核构建比应用构建更高,但两者都是针对 AX 2012 R3,没有服务包) |
* 撰写时属实。请参见下面的Q10,了解如何获取最新内核。
问9:在同一环境中支持为不同AX组件构建不同的内核吗?
不,这不支持。客户应始终对同一环境中的每个AX组件应用内核修复。
这种意外行为可能是由于内核不匹配引起的。在最新版本的AX中,如果客户端尝试连接且内核版本不同,AOS会向事件日志抛出警告消息(事件151)。
下面的截图是从 AX 热修复安装程序中截取的,当时我为 AX 2012 R2 应用内核修复。它显示了所有需要更新的AX组件列表(注意:忽略复选框——我的系统上只安装了少数AX组件,所以部分复选框被自动禁用):
问题10:我找到了一个热修复,我应该安装知识库文章中提到的具体热修复吗?
不一定——如果你遇到的问题已经在AX内核中修复,那么请下载并安装你产品版本和服务包中最新的内核热修复。
如上所述,内核热修复是累积的,所以通常安装最新的内核构建是合理的。要识别修复是针对内核还是应用程序代码,请参阅 http://technet.microsoft.com/en-us/library/hh335183.aspx。
要查找最新发布,您可以参考我们博客上的以下文章,我们会定期更新:
http://blogs.msdn.com/b/axsupport/archive/2012/03/29/overview-of-ax-build-numbers.aspx
你也可以登录支持案例,请求最新的内核热修复包。已登录请求热修复的支持案件通常会被免费关闭。
Q11:我可以卸载内核热修复吗?
是的,内核热修复可以通过Windows标准功能卸载程序更新
(即进入控制面板,查看程序、程序和功能、已安装的更新)。
应用热修复则不然,因为它们会在你的AX模型商店中添加或替换模型,因此无法以同样方式移除。
如上所述,应用或移除内核热修复时,必须确保所有AX组件的内核版本一致。
问题12:我在我的AX环境中遇到崩溃,我应该安装最新的内核吗?
在大多数情况下,是的!几乎所有已知的导致崩溃的错误都在最新的内核构建中被修复。
这是因为 X++ 代码中的问题通常由内核的异常处理框架或 X++/IL 编译器检测和处理,而内核中的意外异常则迫使操作系统终止程序。
故障排查通常需要大量耗时的调查工作。应用最新的累积内核更新是排查最有效的方法,确保我们不会调查已经解决的问题。
除非你已经收集到足够的信息来帮助诊断问题,否则通常建议进行内核更新。
例如,我们几乎总是需要一个完整的用户模式崩溃转储文件。只有在你设置了Windows错误报告或在调试工具(例如调试诊断)中启用了崩溃规则时,才会捕获这类文件。在某些情况下,我们可能需要分析多个导出文件。与其等待更多崩溃发生并冒更多停机风险,更好的选择可能是主动更新内核。
原文地址:常见问题:Microsoft Dynamics AX 内核热修复 – Microsoft Dynamics 365 博客
转载请注明:ww12345678 的部落格 | AX Helper » 常见问题:Microsoft Dynamics AX 内核热修复