2012年11月19日月曜日

CA0055 プラットフォームを統合できませんでした

ポータブル クラス ライブラリ(Portable Class Library)を使用した開発を行っている場合などで、Visual Studio のコード分析(Code Analysis)が CA0055 のエラーを発生させる場合があります。本稿では、このエラーの発生原因と解決方法を説明します。

エラー CA0055 とは

ポータブル クラス ライブラリを使用するコードを Visual Studio を使用してコード分析にかけると、CA0055 のエラーが出る場合があります。

このエラーは、コード分析モジュールが、分析対象のアセンブリのプラットフォームを決定できなかった場合に発生します。

また、エラー CA0055 は多くの場合エラー CA0052 (ターゲットは選択されていませんでした)と同時に発生するようです。

対処法

コード分析モジュールに対して、分析対象のアセンブリのプラットフォームを教えてあげることができれば、このエラーは発生しなくなります。

Visual Studio の GUI を使用して分析対象のアセンブリのプラットフォームを構成することはできませんが、分析対象のプロジェクト ファイル(C# ならば *.csproj ファイル)を直接編集することで、この問題に対処することができます。

コード分析モジュールは起動時に分析対象のアセンブリのパスなどをいわゆるコマンド ライン引数として受け取っており、このコマンド ライン引数に追加する内容をプロジェクト ファイル内で指定することができます。

ポータブル クラス ライブラリを使用する側のプロジェクト ファイルを以下の例のように編集します。

   1: <RunCodeAnalysis>true</RunCodeAnalysis>
   2: <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
   3: <CodeAnalysisAdditionalOptions>/platform:"C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\mscorlib.dll"</CodeAnalysisAdditionalOptions>

1 行目は、コード分析を実行するかどうかを指定しています。この値が false ならばコード分析は実行されないので、必然的に CA0055 のエラーも発生しなくなります。

2 行目は、コード分析モジュールが使用するルール セットです。この値は Visual Studio の GUI で変更できるので、特に手動で変更する必要はないでしょう。

3 行目が、今回のポイントです。CodeAnalysisAdditionalOptions タグは、その名の通りコード分析モジュールに対する追加のオプションを指定するために存在します。そこに、分析対象のアセンブリのプラットフォームで使用される mscorlib.dll へのパスを指定します。

コマンド ライン引数の使用は「/platform:(mscorlib.dll へのフルパス)」です。上述の例では、分析対象のアセンブリのプラットフォームが Silverlight 5 であることを指定しています。自身の環境に合わせて指定してください。

なお、/platform オプションは一回のみ指定することができます。また、CodeAnalysisAdditionalOptions タグの中で /d オプションなどと同時に指定することも可能ですから、「CA0060 間接的な参照のアセンブリが見つかりませんでした」や「CA0058 参照アセンブリが見つかりませんでした」への対処と同時に対処することも可能です。


まとめ


コード分析モジュールの CA0055 のエラーは、多くの場合 CA0052 と同時に発生し、コード分析モジュールが分析対象のアセンブリのプラットフォームを決定できなかったことを示しています。


コード分析モジュールが分析対象のアセンブリのプラットフォームを決定できるように、プロジェクト ファイルを編集してコード分析モジュールに対する追加オプションを指定することにより、このエラーを発生させることなく、正しいコード分析を実行できるようになります。

0 件のコメント:

コメントを投稿