office-js - Microsoft O365 加载项“安装失败”
问题描述
我有一个有效且经过验证的加载项/清单,它通过了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
推荐阅读
- java - 这个休眠搜索错误的原因/影响是什么?
- javascript - 如何将此倒数计时器更改为分钟和秒?
- azure-active-directory - 获取powerbi embed token 403 Forbidden
- matplotlib - 有没有办法不显示使用 Matplotlib FuncAnimation 生成的 .PNG 图像?
- spring-boot - 如何在发现选项卡中获取日志中提供的字段的字段
- go - 为什么 unsafe.Sizeof 返回一个 uintptr?
- typescript - TypeScript 中是否可以使用编译时标记的数字?
- filtering - 服务器端过滤中的 Ag-grid setFilter
- java - 为 JDK 1.8 开发和测试注释处理器
- reactjs - 无法在 i18next 中使用来自 S3 buck 的 JSON