【问题标题】:Microsoft O365 Add-In "Installation failed"Microsoft O365 加载项“安装失败”
【发布时间】:2020-11-06 04:50:27
【问题描述】:

我有一个通过npm run validate 的有效且经过验证的加载项/清单。我和数百名用户都可以通过链接下载我的清单。但是有些用户遇到了这个错误:

无法安装此应用。清单 XML 文件无效。出于安全原因,DTD 是 在此 XML 文档中禁止。要启用 DTD 处理,请将 DtdProcessing 属性设置为 XmlReaderSettings 解析并将设置传递给 XmlReaderCreate 方法。

在什么情况下某些用户会出现这样的错误?

【问题讨论】:

  • 您是否尝试使用npm run validate 命令验证您的清单?请参阅Validate an Office Add-in's manifest 了解更多信息
  • 对不起,这不清楚,我编辑以反映这一点。我确实通过了 npm run validate
  • 还有 XML 模式验证?
  • 看起来所有的验证都很好,但让我明白的是这个错误的条件。 stackoverflow.com/questions/13854068/…怎么改解析,这不是在微软端吗?
  • 您能否提供精简版的清单文件,以便我们可以从我们这边重现此问题并进行检查?

标签: office-js office-addins outlook-web-addins appsource


【解决方案1】:

我实际上在一年前就遇到了这个问题。就像@OutlookAdd-insTeam-MSFT 建议的那样,我也相信这与网络有关,特别是与 DNS 有关。

这是我能找到的,但不幸的是,我的客户从未回来确认它是否有用。

(请注意,部分文字引用自底部列出的网站。)

错误信息

无法安装应用程序。清单 XML 无效。出于安全原因,此 XML 文档中禁止使用 DTD。要启用 DTD 处理,请将 XmlReaderSettings 上的 DtdProcessing 属性设置为 Parse 并将设置传递给 XmlReader.Create 方法。

为什么会这样?

当 O365 读取 manifest.xml 时,它正在通过 msoid.[organization_name].onmicrosoft.com 和 msoid.onmicrosoft.com 解析。如果失败(由于输入错误等),则会调用 HTTP 404 错误。此时,您的 ISP 的 DNS 服务器应接管并提供根据其 CNAME 记录表解析地址。 但是,某些组织可能会提供额外的 DNS 帮助。一旦 msoid 解析器服务检测到 404 错误,ISP 的 DNS 将尝试接管 DNS 解析(DNS 协助)。如果失败(由于缺少 CNAME 记录或拼写错误),它会将 HTML 格式的查询结果返回给 O365。它基本上是 HTTP 200 响应,O365 将其解释为成功的身份验证。 在此之后,O365 开始处理 HTML 格式的响应,就好像它是原始 manifest.xml。由于 HTML 以不正确的方式包含 DTD 声明,您会收到错误消息“出于安全原因,此 XML 文档中禁止使用 DTD”。

可能的解决方案:

a) 确保客户端计算机上的 DNS 设置正确。

b) 暂时切换到另一个 DNS 服务器(例如 Google DNS)

d) 关闭 DNS 协助服务(如果适用)

请参阅以下文章了解更多信息:

https://www.codetwo.com/kb/dtd-prohibited/

https://www.veeam.com/kb2821

http://sharepointers.blogspot.com/2017/03/connect-pnponline-for-security-reasons.html

https://docs.microsoft.com/fi-fi/office365/admin/services-in-china/purpose-of-cname?redirectSourcePath=%252fen-us%252farticle%252fWhat-s-the-purpose-of-the-Office-365-CNAME-record-for-msoid-19b67e2b-1b28-4432-8cca-394803fbdc87&view=o365-21vianet

https://blogs.msdn.microsoft.com/joerg_sinemus/2017/07/10/sharepoint-online-vanity-domain-powershell-csom-and-the-msoid-cname-record/

【讨论】:

    【解决方案2】:

    您可以根据 XML 架构定义 (XSD) 文件验证清单文件。这将确保清单文件遵循正确的架构,包括您正在使用的元素的任何命名空间。如果您从其他示例清单复制元素,请仔细检查您是否还包括适当的名称空间。您可以使用 XML 模式验证工具来执行此验证。

    要使用命令行 XML 架构验证工具来验证您需要的清单:

    1. 安装 tar 和 libxml(如果您尚未安装)。
    2. 运行以下命令。将 XSD_FILE 替换为清单 XSD 文件的路径,并将 XML_FILE 替换为清单 XML 文件的路径。
    xmllint --noout --schema XSD_FILE XML_FILE
    

    此外,您可以尝试使用npm run validate 命令验证您的清单。请参阅Validate an Office Add-in's manifest 了解更多信息。

    【讨论】:

    • 我得到以下输出: Valid Manifest Schema:您的清单确实遵守当前的 Add-in manifest 的 XML 模式定义集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 2021-05-10
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2019-01-09
    相关资源
    最近更新 更多