C# Ribbon Invalidate使我的outlook加载项崩溃
我有一个相当大的outlook外接程序,其中包含以下C# Ribbon Invalidate使我的outlook加载项崩溃,c#,outlook-addin,ribbon,invalidation,C#,Outlook Addin,Ribbon,Invalidation,我有一个相当大的outlook外接程序,其中包含以下ribbon.xml: <?xml version="1.0" encoding="UTF-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> <ribbon> <tabs> <tab idMso="TabMail">
ribbon.xml:
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabMail">
<group id="groupViewHome" label="View tasks">
<toggleButton id="buttonToggleHistoryHome" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" size="large" getPressed="getEnabledToggleHistory" />
</group>
</tab>
<tab idMso="TabAddIns" label="DCP">
<group id="groupCreateTask" label="Create a task">
<button id="buttonNewTask" label="New Task" imageMso="QueryAppend" onAction="buttonNewTask_Click" size="large" getEnabled="getMailSelected" />
</group>
<group id="groupEdit" label="Edit a task">
<button id="buttonAddSelection" label="Copy selection to task" imageMso="QueryUpdate" onAction="selectedText_Click" size="large" getEnabled="getMailAndIDSelected"/>
</group>
<group id="groupView" label="View tasks">
<button id="buttonTaskHistory" imageMso="FileDocumentInspect" onAction="taskInfo_Click" getLabel="getButtonHistoryLabel" />
<toggleButton id="buttonToggleHistory" getLabel="getLabelToggleHistory" imageMso="ControlToggleButton" onAction="toggleHistory_Click" getPressed="getEnabledToggleHistory" />
<checkBox id="buttonTriggerMail" label="Toggle auto-history" onAction="Trigger_Click" getPressed="getInitialTriggerState"/>
</group>
<group id="groupAttach" label="Attachments">
<button id="saveMail2" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" getEnabled="getMailAndIDSelected"/>
<button id="selectAttach" label="Select attachments to add" imageMso="AttachMenu" onAction="selectAttach_Click" getEnabled="getMailAndIDSelectedAndAttach"/>
</group>
<group id="groupLinks" label="Hyperlinks">
<button id="addLinkToMail" label="Add task link to mail body" imageMso="HyperlinkInsert" onAction="addLink_Click" size="large" getEnabled="getMailAndIDSelected"/>
</group>
</tab>
</tabs>
</ribbon>
<contextMenus>
<contextMenu idMso="ContextMenuReadOnlyMailText">
<menu id="dcp" label="DCP">
<button id="selectedText" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
<button id="addTask" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailTable">
<menu id="dcp3" label="DCP">
<button id="selectedText2" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
<button id="addTask3" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailTableCell">
<menu id="dcp4" label="DCP">
<button id="selectedText3" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
<button id="addTask4" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailListTable">
<menu id="dcp5" label="DCP">
<button id="selectedText4" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
<button id="addTask5" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailPictureTable">
<menu id="dcp6" label="DCP">
<button id="selectedText5" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
<button id="addTask6" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailTextTable">
<menu id="dcp7" label="DCP">
<button id="selectedText6" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click"/>
<button id="addTask7" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailTableWhole">
<menu id="dcp8" label="DCP">
<button id="selectedText7" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
<button id="addTask8" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailList">
<menu id="dcp9" label="DCP">
<button id="selectedText8" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
<button id="addTask9" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuReadOnlyMailHyperlink">
<menu id="dcp10" label="DCP">
<button id="selectedText9" label="Copy selection to task" imageMso="CitationInsert" onAction="selectedText_Click" />
<button id="addTask10" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuMailItem">
<menu id="dcp2" label="DCP">
<button id="buttonTaskHistoryMail" label="View task history" imageMso="SourceControlShowHistory" onAction="taskInfo_Click" />
<button id="addTask2" label="New task" imageMso="GoToNewRecord" onAction="buttonNewTask_Click" />
<button id="saveMail" label="Add mail as .msg attachment" imageMso="AttachItem" onAction="saveMail_Click" />
</menu>
</contextMenu>
<contextMenu idMso="ContextMenuAttachments">
<button id="buttonAddAttachment" label="Add attachment to task" imageMso="AttachMenu" onAction="addAttachment_Click"/>
</contextMenu>
</contextMenus>
</customUI>
如果在新的Visual Studio实例中进行调试,则会得到以下结果:
OUTLOOK.EXE中0x70B5B2A7(MSO.DLL)处未处理的异常:0xC0000005:访问冲突读取位置0x00000000。
如果我从我的解决方案中调试代码,我永远无法捕获错误,也不会说它有未处理的错误。它只是崩溃了。(根据我们在评论中的讨论发布了一种“答案”)
如果您无法捕获它或记录日志(不要只捕获异常,将某些内容放入转储-您可以转储到临时用户文件夹中)
我最好的建议是,旧的“分而治之”
——删除所有东西(你已经说过只有“标志”导致了它),只需留下一个按钮,其中包含一件东西——“返回”所有方法,直到你得到一个导致所有问题的方法——类似这样的东西
(用于功能区等的OL XML系统非常容易出错-因此您需要检查所有内容(要仔细)-并且OL错误不是非常具有描述性,大多数时候只是崩溃。顺便说一句,如果您只是删除整个上下文菜单,会发生什么情况?)提出你的建议——如何从中分辨:)我的失效方法非常简单,很可能不是问题所在。不过,如果你想编辑我的问题,我会发布一些,告诉你失效的方法。这不是我想要的:)-在调试中运行它,并尝试捕获以查看发生了什么-你几乎可以得到大多数错误-或日志。隔离并清除除“罪魁祸首”之外的所有其他因素,这样可以缩小范围。它可能是很多东西,w/OL,很难说,让它更具体-我可以帮助,但需要一些东西是的,这是OL-如果你不能捕获它或记录(不要只是捕获异常,把一些东西转储-你可以转储到临时用户文件夹)-我最好的建议,良好的旧分而治之-删除一切(你已经说过只有“标志”导致了它),只需留下一个按钮,其中有一件事-“返回”所有方法,直到你得到一个导致所有问题的方法-类似这样的。。。
public bool getEnabledToggleHistory(IRibbonControl control)
{
return toggleHistoryPanelState;
}
public bool getMailSelected(IRibbonControl control)
{
try
{
MailItem mailItem = getMail();
if (mailItem != null)
{
return true;
}
else
{
return false;
}
}
catch (System.Exception ex)
{
return false;
}
}
public bool getMailAndIDSelected(IRibbonControl control)
{
return mailAndIDSelected;
}
public bool getMailAndIDSelectedAndAttach(IRibbonControl control)
{
if (hasAttachments && mailAndIDSelected)
{
return true;
}
return false;
}