妄想プログラマのらくがき帳 : 9月 2012

2012年9月30日日曜日

テストエクスプローラーが壊れた。。。


Visual Studio Express 2012のテストエクスプローラーが突然開けなくなりました。
メニューの「テスト」-「ウィンドウ」-「テストエクスプローラー」を選択すると、
catchされない例外が発生し、Visual Studioが強制終了するという状態です。

インストールした直後は開くことができたのに…
現象が発生するまでの間にやったことの中で怪しげなのは

1.VS2008Proで作成した単体テストプロジェクトを含むソリューションを
   間違ってExpress2012で開いてしまった。
2.Team Foundation Server Express 2012をインストールし、アンインストールをした。

の2つですが、やっぱ1のProで作成したものをExpressで開いちゃったのが
不味かったんでしょうか。。

仕方ないので、とりあえずコントロールパネルのプログラムと機能から
修復をしてみました…が直らないorz

ちょっとメンドクサイけどアンインストールして再インストール。
これで直るだろうと思ってたんですが、なんとこれでも直らない!

こういう場合は大抵どっかに削除されなかった設定やファイルが残っているもの。
ということで、再度アンインストール後に、レジストリやProgram Filesフォルダを探し回って
Visual Studio 11.0とWDExpressに関する項目を全て削除してやりました。
その後、再インストール。落ちるなよ~と祈りながらテストエクスプローラーを開いてみると

開いたー^^

こんなことに3時間も使ってしまったorz

もし再インストールしても直らないような現象で困っているようでしたら、
残ってるゴミを手動で削除してから再インストールすると直るかもしれません。
アンインストールしても結構色んなものが残ってたりするんで…

注:レジストリをいじる時や消して良いか分からないファイルを削除するときは、
   ちゃんとバックアップをとってからやりましょう。

2012年9月24日月曜日

Visual Studio Express 2012がイイ!


9/13にVisual Studio Express 2012 for Windows Desktopがリリースされたので、
早速インストールして使ってます。
Express 2012をインストールするまではVisual Studio 2008 Professionalを使ってたんですが、
Express 2012が凄くイイ出来なので乗り換えちゃいました。

Visual Studio Express 2012は
http://www.microsoft.com/visualstudio/jpn/downloads
からダウンロードできます。

軽い!
まず起動してみてビックリ!凄く起動が速い。
VS2010の起動がもっさりしていたので、余計に速く感じました。

ソリューションエクスプローラーが凄い!
2012を使って一番驚いたのがソリューションエクスプローラーが凄く便利になったことです。

・クラス、メソッドが表示される
今まではソリューション内のファイルがツリーで表示されるだけでしたが、
2012ではファイル内のクラス、メソッド等も表示されるようになってます。
新しいソリューションエクスプローラー。クラスビューの機能が統合された感じです。 




















・選択された項目のプレビュー
エクスプローラー内でソリューションを選択すると、エクスプローラーのツールバーに
「選択された項目のプレビュー」ボタンが表示されます。

これを押してプレビュー機能を有効にしてエクスプローラー内のクラスやメソッドを選択すると、
エディタ上で選択した項目の定義場所に飛んでくれます。

選択した項目がエディタ上で表示される。









この機能のおかげてソース内の移動がすばやく行えるようになりました。


・エクスプローラー内の検索機能
エクスプローラー内の検索機能も追加されました。


















エクスプローラーにはクラスやメソッド、変数も含まれるようになったので、
これらも検索することができます。また、検索範囲は右クリックメニューの「ここまで検索」で
絞ることができます。

他にも、右クリックメニューからクラスの基本型/派生型/使用元を一覧表示できたり、
メソッドの呼び出し/呼び出し元/使用元を一覧表示できます。
あと地味に嬉しいのが右クリックメニューに「エクスプローラーでフォルダーを開く」が
追加されたことですね。
(今まではProfessionalにはあったんですが、Expressにはありませんでした)

コード分析ツールが追加された!
VS2008 ProfessionalやVS2010 Express上でコード分析を実行するには、
FxCop等のコード分析ツールを外部ツールとして登録する必要があって少し面倒でした。
しかし2012にはコード分析ツールが追加されているので、そんな手間がかかりません。
また、プロジェクトのプロパティの「コード分析」タブで「ビルドに対するコード分析の有効化」を
チェックすると、ビルド時にコード分析を実行してくれるようになります。

他にも色々と細かい部分した所が便利になっていて、凄くコーディングが捗ります。
これが無料だっていうんだから、凄いですよね~。
仕事でHEWを使ったりすると使いやすさの差に愕然とします。。。

2012年9月20日木曜日

Sandcastle Help File Builderを使ってみた。その2。

前回のエントリーに引き続いて、C#のドキュメントコメントを用いたドキュメント生成についてです。
今回はドキュメントコメントからどのようなドキュメントが出力されるか試してみました。

まず、以下のようなサンプルコードを書きました。
ドキュメントコメントの各タグの出力結果を確認するためのコードなので、処理内容は適当です。

/// <summary>
/// ここにクラスの概要。
/// </summary>
public class Program
{
    /// <summary>
    /// ここにプロパティの概要。
    /// </summary>
    /// <value>ここに値の説明。</value>
    public int MyProperty { get; set; }

    /// <summary>
    /// ここに概要を記述。
    /// </summary>
    /// <param name="args">引数。</param>
    public static void Main(string[] args)
    {
    }

    /// <summary>
    /// ここに概要を記述。
    /// </summary>
    /// <remarks>
    /// ここに詳しい説明。
    /// <para>段落を区切る場合はparaタグを使う。</para>
    /// <see cref="System.Int32"/>
    /// </remarks>
    /// <param name="value1">値1。</param>
    /// <param name="value2">値2。</param>
    /// <returns>value1にvalue2を加えた結果を返します。</returns>
    /// <exception cref="System.ArgumentOutOfRangeException">
    /// 引数が範囲外です。
    /// </exception>
    /// <exception cref="System.ArgumentNullException">
    /// 引数がnullです。
    /// </exception>
    /// <example>
    /// ここに使用例を記述。コード例はcodeタグ内に記述。
    /// <code>
    /// int result;
    /// result = Program.Add&lt;int, int&gt;(10, 5);
    /// </code>
    /// </example>
    /// <seealso cref="Program.Main"/>
    public static int Add(int value1, int value2)
    {
        return Program.AddHelper<int, int>(value1, value2);
    }

    /// <summary>
    /// Public以外は出力されない。
    /// </summary>
    /// <typeparam name="T1">***の型。</typeparam>
    /// <typeparam name="T2">***の型。</typeparam>
    /// <param name="value1">値1。</param>
    /// <param name="value2">値2。</param>
    /// <returns>value1にvalue2を加えた結果を返します。</returns>
    internal static int AddHelper<T1, T2>(int value1, int value2)
    {
        return value1 + value2;
    }
}

このコードをSandcastle Help File Builderで出力すると以下のようなドキュメントが作成されます。

クラスのドキュメント

MyPropertyのドキュメント













Add()のドキュメント
AddHelper()のドキュメント













ドキュメントコメント記述時の注意点
・タグの記述順は生成されるドキュメントレイアウトにも反映されるため、
   VSで///を入力したときの自動挿入の順序に従った方がmsdnと同じレイアウトになって○。
・ドキュメントコメント内の<>は&lt;&gt;で記述する。

実際に出力してみると各タグの役割がよく分かりますね。
振り返ってみると、今まで場所違い(タグ違い?)なコメントを記述をしていた気がします。。。

ちゃんと各タグの役割を理解して、より良いドキュメントが作成されるようなコメントを
記述するようにしましょう。じゃないと、わざわざドキュメントコメントで記述している意味がないですからね~。

2012年9月18日火曜日

Sandcastle Help File Builderを使ってみた。その1。


C#にはドキュメントコメントがあります。
特定のコードブロックの直前にXMLタグを記述することで、
コードのドキュメントを作成できるというものです。
(詳細はXMLドキュメント コメント(C# プログラミング ガイド)を参照のこと)

このドキュメントコメント、今までコーディング規約やC#標準ということで使ってきたけど、
ふと思い起こしてみると一度もドキュメント作成で使ったことがない。。。
そこで、ドキュメントコメントが実際にどんな感じのドキュメントになるのか実践してみました。

1.XMLドキュメントファイルを作成する。
ドキュメントを作成するには、まずドキュメントコメントからXMLドキュメントファイルを
作成する必要があります。方法は簡単で、
  • VisualStudioの場合
プロジェクトのプロパティで、ビルドタブの"XMLドキュメントファイル"の
チェックをONにしてビルド。
  • コマンドラインでコンパイルする場合
/doc:ファイル名のコンパイラオプションを使用。

これだけです。これでXMLドキュメントファイルが指定した場所に出力されます。

2.Sandcastle Help File Builderをインストールする。
1で作成したXMLドキュメントファイルですが、単なるXMLファイルです。
これをちゃんとしたドキュメントにするには、NDocやSandcastleといった
ドキュメント作成ツールを使います。今回はSandcastle Help File Builderを使って
ドキュメントを作成しようと思います。

Sandcastle Help File BuilderはCodePlexからダウンロードできます。
http://shfb.codeplex.com/
DOWNLOADSからSandcastle Help File Builder Installerをダウンロードしてください。

ダウンロードしたSHFBGuidedInstaller_***.zipを解凍したフォルダに、
SandcastleInstaller.exeがあるのでこれを実行。
あとはウィザードに従って必要なものをインストールします。

インストールは下記のブログが参考になります。
http://d.hatena.ne.jp/tueda_wolf/20120717/p3

3.Sandcastle Help File Builderでドキュメントを作成する。
インストールが完了したら、スタートメニューのすべてのプログラム-Sandcastle Help File Builderから
Sandcastle Help File Builder GUIを起動します。

起動したら、画面右側にあるProject Exploreにドキュメントを作成するexeファイルと
XMLドキュメントファイルを追加します。
Project Explore - Documentation Sourcesの右クリックメニュー[Add Documentation Source...]を
選択すると、ファイル選択ダイアログが開くので、対象のexeファイルを選択してください。

※XMLドキュメントファイルとexeファイルの拡張子以外の部分が同じなら、exeファイルを追加するだけで
 XMLドキュメントファイルも自動で追加されます。追加されない場合は、同じ方法でXMLドキュメントファイルも追加します。

次に画面左側のProject Propertiesで出力方法等の各種設定を行います。

プロパティ説明
Build
BuildAssemblerVerbosityビルドログの詳細度を設定。
BuildLogFileビルドログファイルを設定。
指定無しの場合、OutputPaehで指定したフォルダにLastBuild.logが作成される。
CleanIntermediatestrueならビルド成功時に中間ファイルを削除する。
ComponentConfigurationsビルドコンポーネントを設定。
Cached~を追加するとビルド時間を短く出来たりする。
CppCommentsFixupC++コンパイラは特定の状況で非標準のXMLコメントが生成することがあり、C++のメソッドのドキュメント化に失敗することがある。そのような場合、ここをtrueにすればドキュメント化可能になる場合がある。
DisableCodeBlockComponenttrueなら<code>タグで囲まれた部分のコードに対する色付けが無くなる。
FrameworkVersion対象の.NET Framework versionを設定。
HelpFileFormatドキュメントの出力形式を設定。選択したすべての形式で出力される。
IndentHtmlデバッグ用のプロパティ。通常はfalseで問題なし。
KeepLogFiletrueならビルド成功後もlogファイルを削除しない。falseなら削除する。
PlugInConfigurationsビルドプロセスプラグインを設定。
UserDefinedPropertiesMSBuildのプロジェクトプロパティを追加する。
Help File
ContentPlacement???(調べたんですが分かりませんでした...)
CopyrightHref"コピーライト"リンクのリンク先URL。
CopyrightText"コピーライト"リンクに表示される文字列。
FeedbackEMailAddress"フィードバックの送信"リンクのE-Mailアドレス。
FeedbackEMailLinkText"フィードバックの送信"リンクに表示される文字列。
FooterTextドキュメントの各ページに表示するフッター文字列。
HeaderTextドキュメントの各ページに表示するフッター文字列。
HelpTitleHelpFileのTitleを設定。
HtmlHelpNameコンパイルされたHtmlヘルプファイルにつけられる名前。
HtmlHelp1で出力すると[名前].chmでヘルプファイルが作成される。
LanguageHelpFileBuilderによって挿入される文字列の言語を設定。
NamingMethodHelp-htmlフォルダに作成されるファイル等の命名方法を設定。
Preliminarytrueならページヘッダーに仮のドキュメントであるという警告を出す。
Languageが日本語の場合、"[これは仮のドキュメントであり、予告なく変更されます。]"が表示される。
PresentationStyle生成されるページの外観を設定。
RootNamespaceContainertrueならルート名前空間のページが生成される。
RootNamespaceTitleルート名前空間の名前を設定。
SdkLinkTargetMSDNのLinkをクリックしたときのリンク先の開き方を設定。
HTML Help1、MS Help 2、MS Help Viewerのプロパティ-SDKLinkTypeがMsdnの場合のみ、このプロパティは有効となる。
SyntaxFiltersSyntax欄に表示するプログラミング言語を設定。
そのほかの重要なプロパティ
OutputPath生成されたHelpFileの出力先パスを設定。
Show Missing Tagsの各プロパティドキュメントコメントでタグが抜けている場合、抜けているタグのドキュメント出力位置にデフォルトのメッセージを表示するかどうかを設定。
Visibilityの各プロパティドキュメント化する対象を設定。

デフォルトの設定でもいいのですが、HelpFileFormatLanguagePresentationStyleあたりは
ちゃんと設定した方がいいと思います。

設定が完了したら、いよいよドキュメントを作成します。
メニューの[Documentation]-[Build Project]でビルドを実行します。
Build Outputウィンドウに"Build completed successfully at..."が出力されれば作成成功です。

Project PropertiesのOutputPathで設定した場所にMSDNチックなドキュメントが
作成されているのが確認できると思います。

今回はとりあえずここまで。
次回のエントリーでは、実際のドキュメントコメントとドキュメントの対応について書こうと思います。