Hatena::ブログ(Diary)

koyakの日記 このページをアンテナに追加 RSSフィード

2011-05-02

Koropokkur.NET 0.2.5をリリースしました

| 19:19

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】アドイン以外からソリューション情報を参照する方法

| 13:46

たまにはリリースのお知らせ以外の更新を。


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で作成、確認しています。

  1. 環境の整備
    プロジェクトの「参照設定」に「EnvDTE」「EnvDTE80」を追加する
    ※アドインが使えるエディションのVisualStudioインストールしていない環境では未確認
  2. コーディング
    下記のようにソースコードを書く

// 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をリリースしました

| 20:59

ま、前のバージョンから一年近く。。。

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をリリースしました

| 12:43

またもや久々の更新です。

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をリリースしました

| 06:59

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さんが仰っている通り、

条件付き公開となります。

// Quill .NET 4.0 対応がそろそろ!? | jfluteの日記

http://d.hatena.ne.jp/jflute/20101207