【发布时间】:2015-04-22 04:07:33
【问题描述】:
我们最近完成了 VSTO Outlook 插件的开发。对于某些配置数据,它使用Folder 上的自定义olText 属性。
当我们的插件检测到这些属性不可用时,它会使用文件夹的 UserDefinedProperties 属性来Find/Add我们的自定义属性(如果它们不存在)。
if (folder.UserDefinedProperties.Find(propertyName) == null)
folder.UserDefinedProperties.Add(propertyName, OlUserPropertyType.olText);
当我们的加载项运行时,我们会多次获取和设置这些属性。我们使用PropertyAccessor GetProperty 和 SetProperty 方法来做到这一点。同样,我们所有的属性都是 OlUserPropertyType.olText 类型。此外,我们总是在获取和设置属性时调度到 Outlook 的 UI 线程。
//set
string value = "blah";
folder.PropertyAccessor.SetProperty(GetSchemaName(propertyName), value);
// get
string value = folder.PropertyAccessor.GetProperty(GetSchemaName(propertyName)
GetSchemaName 返回 ("http://schemas.microsoft.com/mapi/string/" + assemblyGuid + "/" + propertyName)。
但是,我们在文件夹的 PropertyAccessor 上使用 GetProperty 和 SetProperty 会导致频繁的运行时 COMException。下面是调用 GetProperty 的示例异常。我们在 Outlook 2010 和 2013 中都发现了这个问题。
System.Runtime.InteropServices.COMException (0x80020005): Type mismatch.
(Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
at Microsoft.Office.Interop.Outlook._PropertyAccessor.GetProperty(String SchemaName)
我的问题是:使用文件夹 PropertyAccessor 在 VSTO 中获取和设置属性是否存在已知问题?如果不是,为什么会这样?
【问题讨论】:
标签: c# .net outlook vsto outlook-addin