- EnvDTE ヘルプのルート的な場所
- _DTE プロパティ マクロ内でいきなりDTEと書くと_DTEインターフェースをさす。
- マクロは
Public Sub ~() End Sub
- で書くとコマンドとしてVCから使えるようになる。Functionではだめ。
- ソリューションを開く
DTE.Solution.Open("(sln_path)")
- 特定のビルド構成を選択
DTE.Solution.SolutionBuild.SolutionConfigurations.Item("(config_name)").Activate()
- リビルド
DTE.Solution.SolutionBuild.Clean(True) 'TrueでCleanが終わるのを待つ。 DTE.Solution.SolutionBuild.Build(True) 'TrueでBuildが終わるのを待つ。
- インストーラプロジェクトがビルドされない。
Imports EnvDTE Imports System.Diagnostics Public Module UserCreated Public Sub ReBuildAndRun() AddHandler DTE.Events.BuildEvents.OnBuildDone, AddressOf AfterBuild DTE.ExecuteCommand(”Build.RebuildSolution”) End Sub Public Sub AfterBuild(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) RemoveHandler DTE.Events.BuildEvents.OnBuildDone, AddressOf MyMacros.UserCreated.AfterBuild DTE.Debugger.Go(True) End Sub End Module - これならいけた。
- (Ref: http://www.4guysfromviewpoint.com/?p=50 )
- インストーラプロジェクトがビルドされない。
- 終了
DTE.Quit()
- ログの保存
'ログ 'まず出力バッファの内容を取得 Dim text_document As TextDocument text_document = DTE.ToolWindows.OutputWindow.ActivePane.TextDocument '次に保存 DTE.ItemOperations.NewFile("全般\テキスト ファイル") DTE.ActiveDocument.Object("TextDocument").Selection.Insert(text_document.StartPoint.CreateEditPoint.GetText(text_document.EndPoint)) DTE.ActiveDocument.Save("(log_path)") DTE.ActiveDocument.Close(EnvDTE.vsSaveChanges.vsSaveChangesNo)- デバッグ環境以外だと正しいビルドログが変数として取れないことがある。
- ログのパスを引数から取ろうとしてもdevenvのコマンドラインに不正なコマンドを入れると起こられるので/logの引数にするとしてもロングファイル名の問題とか、/logの引数のファイル自体はdevenvが読み書き共有なしで開いてるとかの問題がある。
- とりあえず現状はプロジェクトごとにビルドログをとってマージしている
- もうちょっとスマートにやる方法ないものか…