2011-05-02
Koropokkur.NET 0.2.5をリリースしました
Koropokkur.NET 0.2.5をリリースしました。
http://www.seasar.org/wiki/index.php?SeasarWhatsNew%2F2011-05-02#ta84f2d9
プロジェクト内のファイル、フォルダを整理する「VSArrange」を
コンソールからでも実行できるように修正しました(「VSArrangeConsole.exe」)。
また、それに伴い設定ファイル編集エディタもVisualStudioを起動させずに使用できるよう
別プログラムとして独立させました(「VSArrangeConfig.exe」)。
VisualStudio2010上で動作確認を行っています。
[Improvement]
[KOROPOKKURNET-32] VSArrangeをコンソールから実行できるようにする
- リンク
2011-04-10
【VisualStudio】アドイン以外からソリューション情報を参照する方法
たまにはリリースのお知らせ以外の更新を。
VisualStudioでアドインプロジェクトを作成すると
起点となるメソッドで引数からDTE2という型のオブジェクトを取得することができ、
そこから起動中のVisualStudio、ソリューションの情報を参照、取り扱うことができます。
/// <summary>アドインを実装するためのオブジェクトです。</summary> /// <seealso class='IDTExtensibility2' /> public class Connect : IDTExtensibility2 { (省略) /// <summary>IDTExtensibility2 インターフェイスの OnConnection メソッドを実装します。アドインが読み込まれる際に通知を受けます。</summary> /// <param term='application'>ホスト アプリケーションのルート オブジェクトです。</param> /// <param term='connectMode'>アドインの読み込み状態を説明します。</param> /// <param term='addInInst'>このアドインを表すオブジェクトです。</param> /// <seealso class='IDTExtensibility2' /> public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) { // ↓このオブジェクトからVisualStudio、ソリューション等の情報を参照、操作できる _applicationObject = (DTE2)application; _addInInstance = (AddIn)addInInst; } (省略)
このDTE2オブジェクトをアドイン以外(通常のコンソールプログラム等)のプログラムから
取得する方法をメモ代わりに書いてみます。
実装例のコードはVisualStudio2010で作成、確認しています。
- 環境の整備
プロジェクトの「参照設定」に「EnvDTE」「EnvDTE80」を追加する
※アドインが使えるエディションのVisualStudioをインストールしていない環境では未確認 - コーディング
下記のようにソースコードを書く
// DTE2オブジェクト取得 var vs = (EnvDTE80.DTE2)System.Activator.CreateInstance( System.Type.GetTypeFromProgID("VisualStudio.DTE.10.0")); // ソリューションファイルを開く vs.Solution.Open(@"C:\hoge\Seasar.sln"); System.Console.WriteLine(vs.Solution.FullName); // 読み込んだソリューション下のプロジェクト名を出力 foreach (Project p in vs.Solution.Projects) { System.Console.WriteLine(p.FullName); }○実行結果
C:\hoge\Seasar.sln C:\hoge\Seasar\Seasar.csproj C:\hoge\Seasar.Tests\Seasar.Tests.csproj C:\hoge\Seasar.Unit\Seasar.Unit.csproj C:\hoge\Seasar.DynamicProxy\Seasar.DynamicProxy.csproj C:\hoge\Seasar.Windows\Seasar.Windows.csproj C:\hoge\Seasar.Quill\Seasar.Quill.csproj C:\hoge\Seasar.Quill.Examples\Seasar.Quill.Examples.csproj C:\hoge\Seasar.Dao\Seasar.Dao.csproj C:\hoge\Seasar.Dxo\Seasar.Dxo.csproj
【注意点】
DTE2オブジェクトを生成する際に渡している「"VisualStudio.DTE.10.0"」の
数字部分には扱いたいVisualStudioのバージョン番号が入ります。
VisualStudio2010なら「10.0」、2008なら「9.0」となります。
このバージョン番号と実際に読み込んだソリューションファイルのバージョンが
合っていない場合、COMExceptionが発生します。
○例
// DTE2オブジェクト取得(バージョン番号は9.0(VisualStudio2008用)) vs = (DTE2)System.Activator.CreateInstance( System.Type.GetTypeFromProgID("VisualStudio.DTE.9.0")); // VisualStudio2010で作成したソリューションファイルを開く vs.Solution.Open(TEST_SOL_PATH); System.Console.WriteLine(vs.Solution.FullName);○実行結果
System.Runtime.InteropServices.COMException (0x80004004): 操作は中断されました (HRESULT からの例外: 0x80004004 (E_ABORT)) 場所 EnvDTE.SolutionClass.Open(String FileName)
対処例として、とりあえず思いつくのはソリューションファイル内に書かれている
書式バージョン番号(注:何故かVisualStudioのバージョン+1)を利用する方法です。
○ソリューションファイルの中身(先頭行に書式のバージョン番号が記述してある)
Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Seasar", "Seasar\Seasar.csproj", "{7224C3B3-2C10-4AC5-A118-56558ED4C3C9}" EndProject (省略)○実装例
const string ENV_DTE_OBJ_NAME = "VisualStudio.DTE."; var version = GetVersion(solutionPath); // ソリューションファイルを読んでバージョン番号を取り出す var vs = (DTE2)Activator.CreateInstance(Type.GetTypeFromProgID(ENV_DTE_OBJ_NAME + version));
2011-03-21
Koropokkur.NET 0.2.4をリリースしました
ま、前のバージョンから一年近く。。。
Seasar.NETの.NET Framework4.0対応などをやっていたら
いつの間にかこんなに経ってしまいました。
VSArrange(プロジェクト整理機能)をコンソールで動作するようにしたりとか
CopyGen(コピー処理の自動生成)をフォーム上のコントロールに対しても
コピー処理を生成できるようにしたりとか
ヘッダをかゆい所に手が届く感じで生成する機能とか
実装してみたい要素はいくつかあるのですが、
製作者がぐうたらなために中々進まずにいます。
今回のバージョンでは機能的には追加、更新はありません。
VisualStudio2010で動作するようにほんの少し修正、動作確認をしています。
2008でも動くことは確認していますが
2005では製作者に環境がないため試すことができていません。
ここをご覧になっている方がどれだけいるかわかりませんが、
もしお試しになられた方がいらっしゃいましたら
seasar-dotnetのメーリングリストやこの記事のコメントなどにでも
お知らせいただけたらと思います。
[Improvement]
[KOROPOKKURNET-30] VS2010上でkoropokkur.netを使用可能にする
- リンク
2011-01-29
S2Container/S2Dao.NET 1.4.0 RC2をリリースしました
またもや久々の更新です。
S2Container/S2Dao 1.4.0 RC2をリリースしました。
変更点は下記ページをご覧下さい。
S2Unit.NETの不具合修正を行っています。
http://www.seasar.org/wiki/index.php?SeasarWhatsNew/2011-01-29#n46d675c
DBFlute.NET 0.8.9.23の下記exampleプロジェクトで
動作確認をしています。
・dfnet-asp.net-example
・dfnet-basic-example
・dfnet-multipledb-quill-example
2010-12-10
S2Container/S2Dao.NET 1.4.0 RC1をリリースしました
S2Container/S2Dao 1.4.0 RC1をリリースしました。
変更点は下記ページをご覧下さい。
http://www.seasar.org/wiki/index.php?SeasarWhatsNew/2010-12-10#r78f019b
(DBFlute.NETでの動作は未確認です。
確認がとれ次第お知らせします)
「Quill」についてのみ.NET Framework 4.0に対応しています。
[seasar-dotnet:1887]でjfluteさんが仰っている通り、
条件付き公開となります。