もくじ
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://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=・・・)で指定したフォルダの直下に、成果物がドバっとできた。