Open4
msbuildのbinlogをJSONか何かに変換したい^2
ちょっと C# でやらざるを得なそうということで仕切り直し。こういうどうでも良いのはPowerShellでやらせて欲しい。。
リポジトリとプロジェクトの作成
GitはCygwin上で使ってるので、 fileMode
を切っておく。
$ git init
$ git config core.fileMode false
その後 dotnet
コマンドでプロジェクトを作成する。
$ dotnet new console
$ dotnet new gitignore
new gitignore
は .gitignore
ファイルを適当にセットアップしてくれる。
超長い。
サンプルをビルド
とりあえず https://msbuildlog.com/#api のサンプルをビルドしてみる:
C:\cygwin64\home\oku\repos\binlogdump\Program.cs(2,17): error CS0234: 型または名前空間の名前 'Build' が名前空間 'Microsoft' に存在しません (アセ
ンブリ参照があることを確認してください) [C:\cygwin64\home\oku\repos\binlogdump\binlogdump.csproj]
C:\cygwin64\home\oku\repos\binlogdump\Program.cs(3,17): error CS0234: 型または名前空間の名前 'Build' が名前空間 'Microsoft' に存在しません (アセ
ンブリ参照があることを確認してください) [C:\cygwin64\home\oku\repos\binlogdump\binlogdump.csproj]
C:\cygwin64\home\oku\repos\binlogdump\Program.cs(4,17): error CS0234: 型または名前空間の名前 'Build' が名前空間 'Microsoft' に存在しません (アセ
ンブリ参照があることを確認してください) [C:\cygwin64\home\oku\repos\binlogdump\binlogdump.csproj]
パッケージが無くて失敗するのでnugetする。
$ dotnet add package Microsoft.Build.Framework
$ dotnet add package MSBuild.StructuredLogger
... まだ失敗する。
C:\cygwin64\home\oku\repos\binlogdump\Program.cs(13,45): error CS1061: 'BinLogReader' に 'ReadRecords' の定義が含まれて おらず、型 'Bi
nLogReader' の最初の引数を受け付けるアクセス可能な拡張メソッド 'ReadRecords' が見つかりませんでした。using ディレクティ ブまたはアセンブリ参照が不足していないことを確認してください [C:\cygwin64
\home\oku\repos\binlogdump\binlogdump.csproj]
サンプルが class BinLogReader
してるじゃん。。専用の名称を付ける。
ここまでで各コマンドラインがダンプできるようになった。
JSONにする
.net側に専用の機能がある。
というわけで適当にJSON配列にする。
... コマンドラインのスペースがエスケープされないんだな。。