如何解决无法加载的VSTO插件?

时间:2011-01-12 12:27:19

标签: .net vsto outlook-addin

我的VSTO Outlook插件突然停止在一台客户计算机上运行(它没有加载,没有错误消息)而且我遇到了故障排除问题。该计算机是Windows 7 x86,Outlook 2007.该加载项是使用Visual Studio 2008编写的,并使用VSTO 2005和2003 PIA(因为我们还需要支持Outlook 2003)。它在其他机器上运行得非常好。

以下是我尝试获得有用的故障排除输出的内容:

无。如果没有给出任何原因的指示,加载项就不会加载。我还检查了“通常的嫌疑人”(CAS政策,安装的PIA,注册表中的LoadBehavior,重新安装VSTO和加载项)。

其他一些观察结果:

    注册表中的
  • LoadBehavior保留在3
  • 加载项在Outlook中显示为“已禁用”。选中“COM加载项”中的复选框只会执行任何操作(没有错误,第二次输入表单时会再次清除复选框。)
  • 它在其他客户机器上运行得非常好,并且在这台机器上运行得非常好。 (不,客户无法告诉我他的机器上发生了什么变化。)
  • 我的代码的最顶部有一条Trace.WriteLine消息(ThisAddIn_Startup处理程序中的第一行),但未到达(我使用DebugView检查过)。因此,不加载的原因不是我的加载项中的例外,而是VSTO加载加载项或Outlook加载VSTO失败。

而不是更随机的调试(“试试这个......”,“试试......”),我真的很想强迫Outlook和/或VSTO告诉我什么是错的 ,即在尝试启用加载项时,给我一个有用的错误消息,而不是只是什么都不做。有任何想法吗?

7 个答案:

答案 0 :(得分:52)

这里有关于RobertG5解决方案的更多细节(评论太长了):

问题是Outlook加载项已被硬禁用。据我所知,这与“通常”的无负载情况有所不同。实现这一点的关键是注意到加载项未显示在非活动应用程序加载项下,而是出现在已禁用的应用程序加载项下。这有所不同:在后一种情况下,只需进入COM-AddIn屏幕并勾选复选框即可。 (我想一个很好的消息框“你无法加载这个加载项,因为它已经被硬禁用了”会太多问了...... 叹息。)

那么,如何重新启用硬禁用加载项?

  1. 管理框中,将 COM加载项更改为已禁用的加载项,然后单击“开始”。
  2. 选择加载项,然后单击启用。点击关闭
  3. 好的,现在可以再次加载加载项:

    1. 管理框中,将已禁用的加载项更改为 COM加载项,然后单击“转到”。
    2. 选中已禁用加载项旁边的复选框。点击确定
    3. 参考:http://msdn.microsoft.com/en-us/library/ms268871.aspx

答案 1 :(得分:49)

您是否尝试过再次启用加载项?它在禁用队列中后不会运行。从禁用的加载项屏幕重新启用它后,您可以选中COM-AddIn屏幕中的框以加载它,然后应该提示您更多详细信息,因为您设置了VSTO_SUPPRESSDISPLAYALERTS变量发生在第一位。

答案 2 :(得分:41)

我知道这已经过时了,但出于各种原因,我最近一直在对不加载的Office加载项进行故障排除。

它嚼了很多时间,所以我想我会分享,所以如果你的加载项不会加载或不可见或等等,请尝试这些解决方案。

<强> 1)。未加载加载项。

未加载。加载COM加载项时发生运行时错误。

enter image description here

问题是由于缺少.Net framework 3.5或4.0。

注意:在x64上我只需要.Net 4.0但是在x86 PC上我在安装.Net 4.0后出错了。在article之后我安装了.Net 3.5,然后它在x86 PC上运行了!

<强> 2)。未加载加载项。

仔细检查您是否正确拼写了注册表项。偶尔我输入行为,但在美国拼写中是行为,所以请仔细检查“LoadBehavior”

enter image description here

同时确保“LoadBehavior”为3,对于值列表,请参阅http://msdn.microsoft.com/en-us/library/vstudio/bb386106.aspx#LoadBehavior

第3)。加载项不可见。

您可以通过转到Excel&gt;使加载项可见​​。文件&gt;选项&gt;加载项&gt;选择Manage下拉列表并将其设置为COM Add-Ins&gt;单击GO。在“COM加载项”对话框中,确保勾选了加载项。

<强> 4)。加载项已被禁用。

或者,可以隐藏加载项,因为它已被禁用。您可以通过转到Excel&gt;启用加载项文件&gt;选项&gt;加载项&gt;选择Manage下拉列表并将其设置为Disabled,然后单击GO。选择已禁用的加载项,然后单击“启用”。

enter image description here

<强> 5)。 ExcelDNA用户定义的公式未正确呈现

而不是看到您看到的单元格值:#NAME?

设置以下注册表项:

        HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\options\OPEN:

使用正确的值:

        /R "C:\Program Files\XYZ\XYZ Addin\ExcelDNA.XYZAddIn.xll"

<强> 6)。显示消息框后显示Excel HANGS

重新启用应用程序设置:

        xlApp.ScreenUpdating = true;
        xlApp.DisplayAlerts = true;
        xlApp.Calculation = XlCalculation.xlCalculationAutomatic;
        xlApp.UserControl = true;
        xlApp.EnableEvents = true;

<强> 7)。进一步的疑难解答

通过在系统环境变量中添加以下内容来启用VSTO日志文件:

NAME: VSTO_LOGALERTS
VALUE: 1

可能存在异常错误,导致您的加载项未加载。

您可以检查this source for more info有关VSTO日志记录和警报的信息,但实际上您可以根据需要更改两个环境变量值:

  

显示VSTO警报提示

     

要在消息框中显示每个错误,请设置   VSTO_SUPPRESSDISPLAYALERTS变量为0(零)。你可以抑制   通过将变量设置为1(一)来消息。

     

将VSTO警报记录到日志文件

     

要将错误写入日志文件,请设置VSTO_LOGALERTS变量   到1(一)。

     

Visual Studio Tools for Office在该文件夹中创建日志文件   包含应用程序清单。默认名称为.manifest.log。   要停止记录错误,请将变量设置为0(零)。

答案 3 :(得分:7)

我建议使用Microsoft工具来诊断名为AddinSpy的加载项问题。

答案 4 :(得分:1)

对我有趣,我尝试重启。为我修好了。但是,它为我修复它的原因是,我有一个隐藏的流氓Excel.exe运行。由于运行其他excel应用程序(我正在将MSAccess应用程序迁移到VSTO),因此插件无法启动,因此Access已自动打开隐藏的自动应用程序。

简而言之,如果您的插件没有启动,快速检查就是确保没有其他Excel应用程序在运行。这当然只适用于您尝试安装/启动并运行全新的。

(我用过这个链接) https://www.add-in-express.com/creating-addins-blog/2012/11/13/wix-installation-vsto-office-addin/

答案 5 :(得分:1)

这里还有另一种可能性,即使设置了上面提到的环境变量,你也没有得到任何反馈。我发现如果你在安装后得到这个错误(不是以前的VSTO一直在工作)你还应该仔细检查注册表和&#34; Manifest&#34; 条目,如果你有一个

虽然Jeremy Thompson在他的第二个子弹点中指出了注册表,但他没有显示可能属于您的注册表设置的 Manifest 条目。如果您的Manifest条目没有指向正确的路径和文件,它将显示在Add-Ins列表中,其中包含&#34; Not Loaded&#34; 的条目。

在这里,我们看到一个错误的条目,只指向VSTO文件,没有路径。 enter image description here

这将导致您的AddIn看起来像加载了错误,但没有错误弹出并出现给您并使事情令人沮丧。所以它如下所示,注意下面的位置条目也没有显示路径。 enter image description here

通过放入正确的路径以及文件名来更正条目,它将解决此问题。

我假设缺少错误的原因是你最初没有指出任何错误,所以它列出了AddIn,因为它在注册表中,即使没有任何东西可以加载。

答案 6 :(得分:0)

最后我哄骗Word告诉我:

Upload to remote

之后,感谢[1],FusLogvw很快为我解决了这个问题。

[1] Could not load file or assembly or one of its dependencies