Outlook加载项无法按ID找到Office控件

Outlook加载项无法按ID找到Office控件,outlook,vsto,add-in,Outlook,Vsto,Add In,我刚刚使用VisualStudio和Office 2010构建了一个MS Outlook加载项。我已经在4台机器上安装了它,但有一个用户出现以下错误- Error found in Custom UI XML of "...." ... ... Failed to find Office control by ID 每个人都在运行Windows 7和Outlook 2010-不知道这个人为什么会有问题。有人能建议如何诊断这个问题吗?如果它适用于除一个用户之外的所有人。正如@Brijesh Mi

我刚刚使用VisualStudio和Office 2010构建了一个MS Outlook加载项。我已经在4台机器上安装了它,但有一个用户出现以下错误-

Error found in Custom UI XML of "...."
...
...
Failed to find Office control by ID

每个人都在运行Windows 7和Outlook 2010-不知道这个人为什么会有问题。有人能建议如何诊断这个问题吗?

如果它适用于除一个用户之外的所有人。正如@Brijesh Mishra提到的,检查用户是否有任何其他加载项,以及他是否有自己定制的快速访问工具栏


如果他有任何问题,请删除其他加载项并尝试安装或重置快速访问工具栏自定义项。

我的实际解决方法是分离包含自定义UI的功能区XML文件,并重定向到GetCustomUI方法中的正确文件(使用Office.IRibbonExtensibility实现) 例如:

public string GetCustomUI(string RibbonID)
    {
        switch (RibbonID)
        {
            case "Microsoft.Outlook.Mail.Read":
                return GetResourceText("namespace.type1.xml");
            case "Microsoft.Outlook.Mail.Compose":
                return GetResourceText("namespace.type2.xml");
            default:
                return null;
        }
    }

对于那些有类似问题的用户,您不必删除任何外接程序。 发生的情况是:Outlook将尝试将所有功能区(在功能区xml中找到)加载到用户访问的任何窗口中。然后它会抱怨找不到ID x或y

只需确保Ribbon.cs中的GetCustomUI方法不会一次加载整个Ribbon XML,而是按片段加载

如果不确定需要针对哪些ID,请使用GetCustomUI中的断点,然后启动Outlook,浏览不同的视图(主视图、新电子邮件、新约会、日历等),以便为需要显示外接程序的视图收集ID

就我而言,我需要Microsoft.Outlook.ExplorerMicrosoft.Outlook.Mail.ComposeMicrosoft.Outlook.Appointment

因此,我将GetCustomUI更改为:

    public string GetCustomUI(string ribbonID)
    {
        switch (ribbonID)
        {
            case "Microsoft.Outlook.Explorer":
                return GetResourceText("MyAddin.RibbonsForOutlookExplorer.xml");
            case "Microsoft.Outlook.Mail.Compose":
                return GetResourceText("MyAddin.RibbonForOutlookMailCompose.xml");
            case "Microsoft.Outlook.Appointment":
                return GetResourceText("MyAddin.RibbonForOutlookAppointment.xml");
            default:
                return null;
        }
    }
当然,我必须将Ribbon.xml分解为上面提到的三个xml文件。结果:Outlook将只加载给定屏幕所需的片段(约会、新电子邮件…),并且不会抱怨“在屏幕X或Y上找不到ID”


最后,对于那些不确定为什么某些用户会出现该错误而其他用户不会的用户:这是因为“显示加载项用户界面错误”选项(在选项->高级中)。如果未选中该选项,Outlook将忽略格式错误的功能区XML错误。如果选中,用户将获得有关您的外接程序(如果存在)以及其他外接程序的相关错误。

适用于所有使用基于设计器的VSTO插件而非XML解决方案的用户。 我在所有的网站上搜索这个问题,但只找到了基于XML的解决方案。 web上的Visual Designer没有任何功能,因为在这种情况下,您不必重写“GetCustomUI”方法。 默认情况下,使用可视化设计器设计的功能区返回RibbonManager。 此RibbonManager对象表示项目中的所有Ribbon(可视化设计器)项,并通过活动窗口检查器在后台自动处理。 因此,您不必编写任何特殊代码来处理不同的窗口

要正确配置它,您只需:

  • 为用户访问的每个窗口添加一个额外的Visual Designer功能区
  • 在Ribbon对象的“RibbonType”下,打开复选框列表,仅激活相应的窗口,功能区应显示在该窗口中

如果列表中选中了多个窗口,Outlook将尝试在所有标记的窗口中插入功能区。即使当前未打开相应的窗口。这就是出现错误“未能找到控件ID”的原因。

此用户的计算机上是否安装了其他otlook加载项?在客户机上运行vsto如何?这是一个让我省去了很多麻烦的好答案。非常感谢。有人知道如何为基于设计器的VSTO插件实现这一点吗?我能找到的所有答案都是关于XML插件的,但我继承了一个基于设计器的插件。如果GetCustomUI()方法是基于设计器的,我找不到任何关于该方法放置在何处/何处的引用。当我出现“按ID查找Office控件失败”错误时,我会根据我查看的是Explorer视图还是Inspector视图,为一个选项卡或另一个选项卡获取该错误。但在使用导致错误的调试器时,我找不到任何错误。它仍然说错误出现在XML中,但我认为是在生成的XML中我从未真正看到过。回答很好,谢谢。FWIW,我在测试中发现的ID:
Microsoft.Outlook.Explorer
Microsoft.Outlook.Mail.Compose
Microsoft.Outlook.Mail.Read
Microsoft.Outlook.appoint
Microsoft.Outlook.Contact
Microsoft.Outlook.DistributionList
Microsoft.Mso.IMLayerUI
Microsoft.Outlook.Task