显然我有3个具有相同命名空间的dll(但是对象浏览器说它只存在于一个中)。
通常在Resharper中我可以自动解析引用,但在这种情况下它不会这样做。有问题的类型是ItemEvents_10_Event
,当我在这里搜索该类型时会出现什么:
我尝试使用Microsoft.Interop.Outlook
为界面添加前缀,但它仍会抱怨相同的消息。
以下是有用的用法:
((ItemEvents_10_Event)MailItem).Send += OnSend;
((ItemEvents_10_Event)MailItem).BeforeAttachmentAdd += BeforeAttachmentAdd;
((ItemEvents_10_Event)MailItem).Write += OnInspectorSaved;
请注意,我没有得到任何编译或运行时错误(在运行时我的方法永远不会被调用),但是这个类下面有一条波浪形的红线,这提醒我有一个问题。
答案 0 :(得分:2)
这可能是需要extern alias
的情况。发生错误是因为您有3个程序集(.dll
s),它们在同一名称空间中都包含相同的类。
在VS中,选择您要使用的引用(可以是3中的任何一个),并为其添加别名:
然后,您可以在文件中将其用作:
extern alias MyAlias;
using ItemEvents_10_Event = MyAlias::Microsoft.Office.Interop.Outlook.ItemEvents_10_Event;
这将使用带有别名的.dll中的ItemEvents_10_Event
。