«前の日記(2017年12月10日) 最新 次の日記(2018年08月22日)» 編集

日々をアレコレ


2018年02月09日

WPFでリモートデバッグ

UWPのリモートデバッグは、実際に実行するPCにRemote Tools for Visual Studio を実行するPCに入れて、開発機から実行先をリモートPCを指定するだけで簡単に実行出来てしまうのだけども、WPFではちょっと面倒だった。

まず、Remote Tools for Visual Studioを実際に実行するPCにインストールして、リモートデバッガーを実行して待機するところまではUWPと同じ。ただ、WPF(というか、クラシックデスクトップアプリ?)の場合は、開発機でデバッグ実行するバイナリが同じパス構造がリモートPC側に必要となる。なので、ビルドに成功した場合には(プロジェクトフォルダ)bin/Debugといった、生成されるバイナリや参照するDLLなどの構造があるフォルダを同じフォルダにコピーするような処理が必要になる。ここでの2つの問題が出てくる。1つは、開発機のユーザーと実行するリモート側のユーザーが異なる場合、開発機のプロジェクトがユーザーフォルダにあったりするとコピー先の取扱がややこしい。なので、リモートデバッグをする場合は、C:\Projects みたいなフォルダで開発した歩がいいかもしれない。

もう一つは、実際のコピー処理。Visual Studioのビルドイベントではネットワークフォルダを直接参照することは出来ない。なので、一度ネットワークフォルダをドライブに割り当てる処理が必要なので、次のようなバッチファイルを作っておく。

rem W:は割り当てるドライブレター
rem その次のパスは参照するネットワークフォルダ(ここではPC名HogeのC:\Projectsを共有設定しているものとする)
rem その次は利用するユーザーのパスワード
rem その次の/user:User1はログインするユーザー名(ここではUser1とする)
net use W: \\Hoge\Projects password /user:User1
rem コピーするのはFooソリューション、Fooプロジェクトのバイナリ
robocopy C:\Projects\Foo\Foo\bin\Debug W:\Foo\Foo\bin\Debug /s /e
rem ネットワークドライブの割当を解除
net use W: /delete

もし、PC名やユーザー名などに日本語が使われている場合は、バッチファイルの保存はShiftJISで行うこと。UTF-8など違う文字コードで保存するとコピーに失敗するので注意。そして、このバッチファイルをビルドイベントで call copy2remote.bat などで実行してやるとリモートPCにコピーされる。これらの設定をした上で、プロジェクトのデバッグプロパティで「開始オプション > リモートコンピュータを使用する」にチェエックを入れて、リモートPCのリモートデバッガーに表示されているPC名とポート番号を入力をすると、デバッグ開始でリモートPCで実行される。ブレークを設定すると、リモートPC側の操作で条件が合えば停止して、再開することも可能になる。


«前の日記(2017年12月10日) 最新 次の日記(2018年08月22日)» 編集