我有一个使用CustomTaskPanes的VSTO插件,代码可以编译并正常工作,但问题出现在Resharper和Code contracts for .net等代码分析器中。
这段代码会导致这两个分析器都产生错误消息:
CustomTaskPane taskPane = CustomTaskPanes.Add(new UserControl(), "Title");
taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionFloating;
无法将源类型'Microsoft.Office.Core.MsoCTPDockPosition [office,版本=15.0.0.0,文化=中性,公钥标记=71e9bce111e9429c]'转换为目标类型'Microsoft.Office.Core.MsoCTPDockPosition [Microsoft.Office.Tools.Common,版本=10.0.0.0,文化=中性,公钥标记=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版本: