.NETの破壊的変更

全然気付かなかったが何気にメンドーな変更。 InformationalVersion値にコミット情報が埋め込まれるようになっていた。
何がめんどいかというと、System.CommandLine使ったときのバージョンが否応なしにこれでとっちゃうのね。なので1.00+xxxxxxとかになる。

これはある意味判断としては正しいと思うんだけど、個人的にCLIツール作ったときにコマンドラインツールで--versionした時にバージョンは外したいので、そういうときは以下のようにすれば切れる。

<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>

Windows開発で何気にあると便利なツール3選

いまいち使い方は完全に理解してないが、あった方が良いと思ってるツール。
正直こういうののLinux Desktop & Mac OS版の良いツールを知りたいとは思っている…

  • Dependencies
    • 最低限必要なDLL依存関係などのリストを表示するツール。役立ったことはないが、ツール箱に入れてある。
  • プロセス エクスプローラー
    • タスクマネージャーのちょっと本格的な版
  • プロセス モニター
    • これはとある時に大活躍した。DLL開こうとして駄目でしたとか、ソフトの謎のエラー的なやつの追跡に役立つ

dumpbinにPATHを通す

Visual Studioにはdumpbinというdll解析ツールがある。上のDependenciesでも良いんだけど、これがあるとCLI上でdllのエクスポート関数が何かとか調べられる。恐らくWindowsで使えるlldコマンドがこれである。
しかし、Visual Studio専用のPowershellしか通常は使えない。これは自分のプロファイルとかに以下みたいな感じでパスを通せば良い。

$vsversion = "2022"
if ($IsWindows -and (Test-Path -Path "C:\Program Files\Microsoft Visual Studio\$vsversion\Community\VC\Tools\MSVC" -PathType Container)) {
  $dbdir = $(Get-ChildItem -Recurse -Include "*dumpbin.exe" -Path "C:\Program Files\Microsoft Visual Studio\$vsversion\Community\VC\Tools\MSVC" | Select-Object -First 1 -Property DirectoryName)
  if ($dbdir) {
    $env:PATH = $env:PATH + ";" + "$($dbdir.DirectoryName)"
  }
  $dbdir = $null
}
$vsversion = $null