2015年12月27日日曜日

C#でVisualStudioを操作してC#のコードを整形する

というお題がTLに上がっていたので、c# - autoformat code from command line - Stack Overflowの記事を参考にして、C#からVisualStudioを操作するコードを書いてみました。

実装コード

最終的に出来上がったコードは下記の通りです。
コンソールアプリケーションのプロジェクトを新規作成し、Program.csに貼り付けて頂ければコマンド
ラインツールとしてお使い頂けます。

実装のポイント

適宜書き換えが必要な事項はコード中にコメントで記載しています。
ポイントをまとめると、
  • EnvDTEを参照アセンブリに追加する
  • System.Activator.CreateInstance()でEnvDTE.Solutionのインスタンスを生成する際には、操作したいVisualStudioのバージョンに対応するProgIDを指定する
  • EnvDTE.Solutionのインスタンスは、生成するたびにVisualStudioが起動するので、適当に使いまわす。(Thanks to 回転説法さん)
    • 何かするたび(今回の場合、ファイルを整形するたび)にインスタンスを生成すると、メモリ消費量が肥大化して死にそうになる。 
    • なおプログラム終了時には、インスタンス破棄時に紐づけられたVisualStudioも自動的に終了してくれる。
  • EnvDTEを使えば、コードの整形以外にもいろいろできる(っぽい)

EnvDTEを使ってできること(参考)

自分ではMSDNにさっと目を通してみても特に使えそうなメソッド類は見つけられなかったのですが、EnvDTEを使えば以下のようなこともできるようです(他力本願)。