c# – 在两个程序集中定义相同的类型

我有一个VSTO-addin,它使用CustomTaskPanes.我的代码编译和工作正常,但问题来自代码分析器,如Resharper和.net的代码合同.

此代码引发两个分析器的错误消息:

CustomTaskPane taskPane = CustomTaskPanes.Add(new UserControl(), "Title");
taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionFloating;

Cannot convert source type ‘Microsoft.Office.Core.MsoCTPDockPosition [office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]’ to target type ‘Microsoft.Office.Core.MsoCTPDockPosition [Microsoft.Office.Tools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]’

这很奇怪,因为公共类型Microsoft.Office.Core.MsoCTPDockPosition仅存在于office.dll中.无论如何,我尝试使用别名解析它并将Microsoft.Office.Tools.Common命名为Tools_Common:

extern alias Tools_Common;
using System;
using System.Windows.Forms;
using Microsoft.Office.Core;
using Tools_Common::Microsoft.Office.Tools;
using CustomTaskPane = Tools_Common::Microsoft.Office.Tools.CustomTaskPane;

但它根本没有帮助.消息的原因是什么?我该如何解决(特别是代码合同)?

此外,我发现另一个奇怪的神器 – Resharper的自动完成显示MsoCTPDockPosition像它存在于Microsoft.Office.Tools.Common.dll,但后来我尝试做自动完成,它使用office.dll版本:
《c# – 在两个程序集中定义相同的类型》

最佳答案 您应该使用VS中的COM选项卡而不是Office.dll中的Microsoft Office 15.0对象库

点赞