リモートのPCに、VisualStudioでビルドした成果物(.exeなど)をコピーする手間を省く

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

自分の実装作業用PCでビルドして、それを別の実環境PCにコピーして、そっちで動かしたいときがある。

実環境PCに、リモートデバッグで接続してVisualStudioでデバッグする場合は、以前調べたリモートデバッグのやり方を使ってデバッグをするのだが、今回は、デバッグ実行をするのではなく、配置だけして、実行するときは、実環境PCの方で、exeファイルをダブルクリックして手動で実行したい。

その場合、今は、 ネットワークでつながってフォルダ共有をしている場合でも、

  • VSの出力先フォルダの中身を、
  • Ctrl+Cでコピーして、
  • 共有フォルダの方にCtrl+Vで貼り付けする

みたいなことをしたうえで、実環境PCの方で、exeをダブルクリックして実行、みたいなやり方をしていた。

それを、exeをダブルクリックして実行する部分は仕方ないと思うので、手でCtrl+C→Ctrl+V する部分だけでも省略したい。

今回の解決したかったポイント

dotnet publishコマンドや、MSBuildコマンドで、出力先を指定することで実現する。

VisualStudioで.NET6のプロジェクトをビルドすると、通常、

├─bin
│  └─x64
│      └─Debug
│          └─net6.0-windows
│              └─win-x64

こんな感じで、binフォルダの下に「プラットフォーム(x64)」「コンフィギュレーション(Debug)」「ターゲットフレームワーク(net6.0-windows)」「ランタイム(win-x64)」を示すフォルダができる。

で、こんなに深い階層にしたくないときは、csprojに

<PropertyGroup>
  <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
  <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
</PropertyGroup>

を書くと、

├─bin
│  └─x64
│      └─Debug

という感じで、「ターゲットフレームワーク(net6.0-windows)」「ランタイム(win-x64)」のフォルダをできないようにできる。

参考:

MSの公式

https://learn.microsoft.com/ja-jp/visualstudio/ide/how-to-change-the-build-output-directory?view=vs-2022

自分の昔の記事

https://qiita.com/tera1707/items/fdf3aadc30b769cf8d1f

が、今回は、このx64もDebugもフォルダができてほしくなかった。「出力先」で指定したフォルダの直下に、必要なものがドバっと入ってほしい。

今回のやり方

dotnet publishや、MSBuildコマンドの、出力先フォルダの指定を使う。

dotnet publishを使う

自分の場合、プラットフォームがx64でターゲットフレームワークがnet6.0-windows、ランタイムはwin-x64、という構成をよく使うので、下記のようなコマンドで、出力先フォルダを指定してやれば、指定のフォルダ直下にドバっとできた。

dotnet publish ConsoleApp2.csproj -f net6.0-windows -c Release -r win-x64 --self-contained -o \\192.168.31.3\test\app2

\\192.168.31.3\・・のようなネットワーク越しの共有フォルダでも指定できるようなので、リモート先のPCにも直接出力できて便利。

MSBuildを使う

MSBuildの場合でも同じようなことができた。

MSBuild  .\ConsoleApp2.csproj /t:rebuild /p:Consiguration=Release /p:platform=x64 /p:OutDir=\\192.168.31.3\test\app2-3

これで、出力先(/p:OutDir=・・・)で指定したフォルダの直下に、成果物がドバっとできた。