はじめに
ふと仕事でプロジェクトの設定を場合によってゴニョゴニョしないといけなくて、VisualStudioのアドインがあったら捗るのになという案件があったので作り方を調べてみました。
おそらく、VS2013でも作り方はほぼ一緒かと。VS2008で作ったものをそのまま使うことは出来ないみたい。
作り方
後は、プログラムをガリガリ書いていくだけです。(えっ
簡単にデバッグ・作成の流れ
- 作成したアドインを実行[ツール→(さっきつけたアドイン名)]してみると、新しいVisualStudioが開きます。
- とりあえず、アドインのConnect.csのExecにブレークポイントを張ってアドインを実行してみると、Execが呼ばれるのが確認できる。他に、アドインが接続された時に呼ばれるOnConnectionやアンロードされた時のOnDisconnectionなどコールバックが幾つか用意されてる。
- あとはいい感じにコードをガリガリ書いたら完成\(^o^)/
Formを作りたい場合
connetc.cs
using System.Windows.Forms;
namespace MyAddin1
{
public class Connect : IDTExtensibility2, IDTCommandTarget
{
public Connect()
{
}
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName == "MyAddin1.Connect.MyAddin1")
{
handled = true;
// フォーム生成・表示
Form1 form = new Form1();
form.Show();
// プロジェクトの設定を弄りたいのでオブジェクトを渡しておく(Form1に関数追加)
form.SetDTE(_applicationObject);
return;
}
}
}
private DTE2 _applicationObject;
private AddIn _addInInstance;
プロジェクト設定をアドインから変えてみる
connetc.cs
private void button1_Click(object sender, EventArgs e)
{
// スタートアッププロジェクトを取得
SolutionBuild2 sb = (SolutionBuild2)_DTE.Solution.SolutionBuild;
Project startupProj;
string msg = "";
foreach (String item in (Array)sb.StartupProjects)
{
msg += item;
}
startupProj = _DTE.Solution.Item(msg);
Configuration activeConfiguration = startupProj.ConfigurationManager.ActiveConfiguration;
// プロジェクトのコンフィグ取得
EnvDTE.Properties configProps = activeConfiguration.Properties;
// コンフィグ一覧を出力
foreach (EnvDTE.Property p in configProps)
{
Debug.Print(p.Name);
}
// プロパティを変更してみる
EnvDTE.Property prop;
prop = configProps.Item("Command");
prop.Value = "-window";
}
その他メモ
プロジェクトファイルに依存しないVC固有の設定?はProjectオブジェクトをMicrosoft.VisualStudio.VCProjectEngineのVCProjectにキャストして辿らないといけないみたい。面倒。。。
コマンドラインでも使えるアドインってのが作れるので、コマンドラインからのビルドしても使えそう?(調査中)
アドインの配布
http://www.atmarkit.co.jp/fdotnet/special/vsaddinintro03/vsaddinintro03_01.html