Open4

msbuildのbinlogをJSONか何かに変換したい^2

okuokuokuoku

ちょっと C# でやらざるを得なそうということで仕切り直し。こういうどうでも良いのはPowerShellでやらせて欲しい。。

okuokuokuoku

リポジトリとプロジェクトの作成

GitはCygwin上で使ってるので、 fileMode を切っておく。

$ git init
$ git config core.fileMode false

その後 dotnet コマンドでプロジェクトを作成する。

$ dotnet new console
$ dotnet new gitignore

new gitignore.gitignore ファイルを適当にセットアップしてくれる。

https://github.com/github/gitignore/blob/4488915eec0b3a45b5c63ead28f286819c0917de/VisualStudio.gitignore

超長い。

okuokuokuoku

サンプルをビルド

とりあえず 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

https://github.com/okuoku/binlogdump/commit/3cd29db227b867775102b1b8bed879ab44061a9d

... まだ失敗する。

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 してるじゃん。。専用の名称を付ける。

https://github.com/okuoku/binlogdump/commit/6221dfffb9a16a29b506fbf67f618069340bae64

ここまでで各コマンドラインがダンプできるようになった。