我的VSTO 3.0 Outlook插件无法加载。

3
我正在尝试诊断为什么我的 Outlook 插件(使用 C#/VSTO 3.0/VS 2008 编写)在安装后无法加载。该插件在我的开发机上工作得很好,因为我安装了 Visual Studio 2008。但我不能指望所有用户都拥有所有先决条件,因此我按照以下步骤编写了一个安装程序:http://msdn.microsoft.com/en-us/library/cc563937(loband).aspx
我在一个全新的 Windows XP SP 2 机器上安装了这个插件,并安装了全新的 Outlook 2007。它成功安装了所有的先决条件(.NET 3.5、VSTO 3.0 运行时、Windows Installer 3.1、2007 PIAs),Outlook 启动了,但插件没有运行。如果我转到信任中心的“加载项”选项卡,我会在“未激活的应用程序加载项”部分看到我的插件,并显示“未加载。在加载 COM 加载项期间发生运行时错误。”的消息。
不确定如何找到特定的错误以便修复它。
注册表键看起来还好。在 HKEY_CURRENT_USER\Software\Microsoft\Office\Outlook\Addins\BlahAddin 下,我看到了 Description、FriendlyName、LoadBehavior(设置为 3,直到它在失败后变为 2)和 Manifest。
尝试了 VSTO_SUPPRESSDISPLAYALERTS 环境变量技巧,然后从命令行启动 Outlook,但没有输出。
我已经可以进行远程调试,但不确定该查找什么。当我附加到 Outlook 时,我看不到我的 DLL 被加载,但也许托管的 DLL 在 VS 中不会以同样的方式显示出来。
还有其他的想法吗?我可以采取哪些步骤来产生一个特定的错误,以便诊断?
4个回答

3

经过数周的痛苦后,我解决了我的问题。在安装程序构建期间,“清单”注册表键被损坏为一些垃圾值。这是一个已知的Visual Studio错误,据说在Visual Studio 2008 SP1中得到修复,但对我来说显然没有。将项目名称重命名为与插件名称不同即可解决问题。很随意,是吗?


2

请确保您在 Outlook 调用的所有方法的顶层都有 try-catch 处理程序,并记录任何无法处理的异常。将故障排除的重点放在像 Startup 方法和其他在初始化期间调用的方法上。


很遗憾没有帮上忙。我的启动/关闭方法非常简单,我尝试用try/catch块包装它们。 - Wayne Kao

1

你可能需要使用远程调试器来调试。在你的开发机器上(在Program Files中的Visual Studio文件夹中),将MSVCMON.EXE文件夹共享到测试机器上(使用UNC路径共享),并在调试器中启动Outlook,捕获(.NET)模块中的异常并在方法中设置断点。

如果你需要在每次安装解决方案之前清理测试计算机,那么你应该在Virtual PC 2007 VM(免费下载)下运行XP,并在设置好除插件以外的所有内容后切换到差异化硬盘,以便在修复程序错误时不必反复卸载/重新安装,而是可以快照你预先安装的状态。

你是安装Debug版本还是Release版本?也许不同版本有不同的要求。这只是猜测。

-Mike [MSFT Office Dev]


始终在没有任何状态的干净虚拟机上安装。可以以托管和非托管模式进行远程调试,附加到Outlook。在加载过程中会抛出异常,但如果没有mso.dll符号,则很难解密: “在OUTLOOK.EXE中的0x7c81eb33(kernel32.dll)处发生了第一次机会异常:0x000006A6:绑定句柄无效。” 当插件未加载时,在安全模式下也会出现类似的异常。无法在我的插件中设置断点(“当前不会命中断点。不会为此文档加载任何符号。”),但是我的消息框未显示意味着在加载插件之前我已经遇到问题。 - Wayne Kao

1
在您的计算机上,当您从Visual Studio运行插件时,它应该在HKEY_CURRENT_USER\Software\Microsoft\VSTO\Security\Inclusion{SomeGuid}中创建一个注册表键。确保这些注册表设置也与您的插件一起部署。它们是允许您的代码受信任的设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接