导致 Outlook 365 永久禁用自定义 VSTO COM 加载项的常见代码异味有哪些?

问题描述

我目前正在维护一个公司内部插件,它只接收一封邮件,将其包装为附件并将其发送到我们的内部邮件地址以进行垃圾邮件报告。

插件总是有一个看似没有原因的问题( - 此外:“插件已导致 Outlook 崩溃 - 因此它已被永久禁用”,在检查插件状态时) Outlook 不喜欢它并永久禁用它,没有重新启用的选项。

这已经是 Outlook 2016 的一个问题,然后可以通过设置一些注册表项来解决。我的任务是为 Outlook365 构建一个版本。 Outlook365 在那里似乎更明智。

添加一个设置以下键的函数

[HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\SpamReporter]
"LoadBehavior"=dword:00000003

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Resiliency\DoNotdisableAddinList]
"SpamReporter"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Addins\SpamReporter]
"LoadBehavior"=dword:00000003

以下密钥也通过公司政策推出:

[HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\outlook\resiliency\addinlist]
"SpamReporter"="1"

此外。该程序集在 Visual Studio 中使用 Comodo 证书进行签名,我也尝试再次对安装程序本身进行签名。

但所有这些努力似乎都没有任何作用。我以为我有一个可以推出的工作版本,结果我们的推出人员回答说,当他快速测试插件时,他没有显示出来。

这种行为真的很令人沮丧,而且关于 Office 365 VSTO COM 加载项故障排除的文档似乎真的很少。

我花了很多时间试图解决这个问题。

解决方法

很可能您的插件加载时间过长(假设它不会在启动时崩溃)。 请注意,您会因使用 .Net 而受到惩罚 - 需要在加载项中的一行代码运行之前加载特定版本的整个 .Net 运行时。曾经有一个预热注册表项,可以告诉 Outlook 您正在使用哪个版本的 .Net 运行时,因此它会预加载它,但不再受支持。

当您转到“文件”时,Outlook 本身会说什么|选项 |插件 | COM 插件?