<Attention>
自分、不器用ですから。
</Attention>
ここのところのエントリで Visual Studio 2005 の Visual Basic の WindowsApplication プロジェクト テンプレートがちょっと自分と合わない気がして、「じゃ、作ればいいんぢゃね?」なんて軽々しくも(後で後悔するハメになりますが、)思ったわけです。どういったものを目指すのかといいますと、
- Program.vb を生成。内容は以下のとおり。
Imports System
Imports System.Windows.Forms
Namespace ルート名前空間
Public Class Program
<STAThread()> _
Public Shared Sub Main()
Application.EnableVisualStyles()
Using frm As New Form1
Application.Run(frm)
End Using
End Sub
End Class
End Namespace
-
プロジェクト のプロパティの各種設定。
- スタートアップは [Sub Main](アプリケーション フレームワークは使用しない。)
- インポートされた名前空間は無し。
- Option Explicit On、Option Strict On、Option Compare Binary
- ルート名前空間はコードに出力する。
- Form1.vb ならびに Form1.Designer.vb を以下のコードで出力。
Imports System
Namespace ルート名前空間
Partial Public Class Form1
Inherits System.Windows.Forms.Form
Public Sub New()
MyBase.New()
InitializeComponent()
End Sub
End Class
End Namespace
Imports System
Namespace ルート名前空間
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
Private components As System.ComponentModel.IContainer
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.Text = "Form1"
End Sub
End Class
End Namespace
とりあえず、情報収集してみました。自分用もかねてリンクです。
MSDN:Visual Studio テンプレート(http://msdn2.microsoft.com/ja-jp/library/6db0hwky(VS.80).aspx)
MSDN:プロジェクト テンプレートの作成(http://msdn2.microsoft.com/ja-jp/library/ms247120(VS.80).aspx)
リンク先を見る限り、テンプレート自体は Visual Studio 2005 のテンプレートのエクスポート機能でさっくり作れそうですね(便利な世の中ですよ、ホントに♪)。でも、ひとつ気になることがあるんですよ。
「ルート名前空間」をどうしようか。
Visual Studio がプロジェクトのプロパティに持っている「ルート名前空間」、C♯だとテンプレートへのパラメータ、Visual Basic だとコンパイラ
オプションになっている模様。これをパラメータとして使うといささか困ったことになるんじゃないかと。以前のエントリでも書きましたが、
ここに指定されている「ルート名前空間」は Visual Basic コンパイラにオプションとして渡されてしまうの。
つまり、Visual Studio がプロジェクトのプロパティに Hoge というルート名前空間が設定されていて、かつテンプレートで以下のように Hoge の出力を行った場合、
Namespace Hoge
Public Class Program
End Class
End Namespace
この Program クラスは
Hoge.Hoge.Program になっちゃいます。orz
これはテンプレートだけに関することではなく、自分で Namespace ステートメントを記述した場合も同じで、[ルート名前空間].[記述した名前空間]になっちゃいます。逆に言うと、
実際の名前空間はコードに書かれている部分だけでは判断できない
(可能性がある。)。
・・・気をつけないといけません。
しかし、今回のテンプレートではどうしたものでしょう。コンパイル オプションを制御する?(できるの?)カスタムパラメータとウィザードでゴソゴソする?(できるの?)
・・・計画は失敗か?(続くかもしれないけど続かないかもしれない。)
※ 中さんのアドバイスによりProgram クラスの内容を変更しました。