4

CustomTaskPanes を使用する VSTO アドインがあります。私のコードはコンパイルされて正常に動作しますが、.net の Resharper やコード コントラクトなどのコード アナライザーに問題があります。

このコードは、両方のアナライザーからエラー メッセージを引き起こします。

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

ソース タイプ 'Microsoft.Office.Core.MsoCTPDockPosition [office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]' をターゲット タイプ 'Microsoft.Office.Core.MsoCTPDockPosition [Microsoft.Office.Tools.Common,バージョン = 10.0.0.0、カルチャ = ニュートラル、PublicKeyToken = b03f5f7f11d50a3a]'

public 型の 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のオートコンプリートは、Microsoft.Office.Tools.Common.dllに存在するようにMsoCTPDockPositionを表示しますが、オートコンプリートを実行しようとすると、office.dllバージョンが使用されます: ここに画像の説明を入力

4

2 に答える 2

0

それで、私はいくつかの異なる方法を試し、解決策を見つけました。Office.dll アセンブリを別のバージョンに変更すると、

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Office.dll, 15.0.4420.1017

C:\Windows\assembly\GAC_MSIL\office、15.0.4787.1001

その後、Resharper は正常に動作します。しかし、Code Contracts でも同じエラーが発生します。dynamicだから私は言葉を使ってそれをだましました

((dynamic) taskPane).DockPosition = MsoCTPDockPosition.msoCTPDockPositionFloating;

を使用することにあまり満足していませんdynamic。しかし、コード コントラクトは私にとって非常に重要なので、多少の汚れは許容できます。

バージョンを変更した後、またはコード コントラクトのよりクリーンなソリューションを見つけた後、Resharper がうまく機能し始めた理由を誰かが説明できる場合は、回答を再度受け入れます。

編集:

((dynamic) taskPane).DockPositionTargetExceptions が表示され、プロパティがオブジェクトに存在しないことが示されます。そこで、リフレクションを使用するように変更しました

typeof(CustomTaskPane)
    .InvokeMember("DockPosition", BindingFlags.SetProperty, null, taskPane, new object[] { MsoCTPDockPosition.msoCTPDockPositionFloating }, null);
于 2016-02-01T10:25:49.553 に答える