我有一个有效且经过验证的加载项/清单,它通过了npm run validate
. 我和数百名用户都可以通过链接下载我的清单。然而,一些用户一直面临这个错误:
无法安装此应用。清单 XML 文件无效。出于安全原因,此 XML 文档中禁止使用 DTD。要启用 DTD 处理,请将 XmlReaderSettings 上的 DtdProcessing 属性设置为 Parse 并将设置传递给 XmlReaderCreate 方法。
某些用户在什么情况下会出现这样的错误?
我有一个有效且经过验证的加载项/清单,它通过了npm run validate
. 我和数百名用户都可以通过链接下载我的清单。然而,一些用户一直面临这个错误:
无法安装此应用。清单 XML 文件无效。出于安全原因,此 XML 文档中禁止使用 DTD。要启用 DTD 处理,请将 XmlReaderSettings 上的 DtdProcessing 属性设置为 Parse 并将设置传递给 XmlReaderCreate 方法。
某些用户在什么情况下会出现这样的错误?
我实际上在一年前就遇到了这个问题。就像@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 一样。
可能的解决方案:
a) 确保客户端计算机上的 DNS 设置正确。
b) 临时切换到另一个 DNS 服务器(例如 Google DNS)
d) 关闭 DNS 协助服务(如适用)
请参阅以下文章了解更多信息:
https://www.codetwo.com/kb/dtd-prohibited/
http://sharepointers.blogspot.com/2017/03/connect-pnponline-for-security-reasons.html
您可以根据 XML 架构定义 (XSD) 文件验证清单文件。这将确保清单文件遵循正确的架构,包括您正在使用的元素的任何命名空间。如果您从其他示例清单复制元素,请仔细检查您是否还包括适当的命名空间。您可以使用 XML 模式验证工具来执行此验证。
要使用命令行 XML 模式验证工具来验证您的清单,您需要:
xmllint --noout --schema XSD_FILE XML_FILE
此外,您可以尝试使用该npm run validate
命令验证您的清单。有关详细信息,请参阅验证 Office 加载项的清单。