delete from hateblo.jp where 1=1;

タイトルに意味はありません。

pdbファイルは果たして悪なのか

対象

  • C# で開発している人
  • 公開アプリケーションを開発している人
  • pdbファイルが必要だと感じている人

対応策

無難なディレクトリでビルドする(推奨)

ばれても問題ないパスでビルドを行うと、余計な心配をしなくて済む。

DebugInfoを使用してデータを削除する

Remove full path of PDB file from C# dll or exe. (/pdbaltpath in c#)
DebugDir download | SourceForge.net

もともとはDebugDirという処理だけど、拡張してデバッグ情報を変更できる機能をつけてくれたらしい。
上記DebugInfoをダウンロードして、コマンドを実行すると、パスを削除できるようだ。
※パスの中にスペースがあるとことごとくデータが残るみたいなので、ビルドパスに注意しよう。
※署名があると検証に失敗する可能性があるため、確認が必要

経緯

過去に、Visual StudioユーザーがReleaseビルドをするときに必ずやってほしい2つの設定 - Qiitaをブックマークしたら、
ブコメにスターが無意味につくので、本気で調べてみようと思った午前1時。

現状調査

詳細は下記章に記載するが、まとめると以下の通りになる。

pdb 署名 結果
pdb-only なし exeなどにフルパスの記載あり
pdb-only あり exeなどにフルパスの記載あり
none なし フルパスの記載なし
none あり フルパスの記載なし
full 未調査 未調査
PDBファイル出力あり(pdb-only)

単純にデバッグ情報をpdb-onlyにした状態でReleaseビルドした結果、フルパスが記載された。
このとき、署名はしていない。想定通り。

もしかして、厳格な型の場合は、このあたりの動きが違うのではないかと調査してみたが、影響なしだった。

PDBファイル出力なし(none)

単純にデバッグ情報をnoneにした状態でReleaseビルドした結果、pdbファイルしか記載されなかった。
このとき、署名はしていない。想定通り。

MicrosoftがリリースしているDLLはどうだろうか。

Microsoft.CSharp.dllを参照してみる。
ファッ?!PDBファイル名しか記載がない。
→これは何か方法があるはず

2019/08/26 追記

次の手順でパスを書き換えることが可能。ただし、.NET Coreでのみ確認している手順なので、動作保証はできません。
なお、カバレッジツールを噛ます場合は正しい相対パスにしないとどうやってもカバレッジをとれなくなるので、
よく確認したうえで組み込むことをお勧めします。

参考文献