解決したいこと
Visual Studio 2022でWindowsフォームアプリを作っています。
プロジェクトの発行をすると出力フォルダにexeやdllなどが出力されます。
これをそのままユーザーに使わせることを考えると、exeがほかのファイルに埋もれてしまって使いにくいです。
フォルダを開けばexeがすぐに見つかるよう、exe以外のファイルをサブフォルダにまとめてしまいたいです。
Visual Studio2022でこのような発行の仕方をする設定方法をご教示ください。
よろしくお願いいたします。
前提
・exeにdllを全て埋め込んでしまう単一ファイルでの発行も可能ですが、この方法は使わずに単にフォルダ分けで対応したいと考えています。
・実行ファイルのあるフォルダ自体を触らせないようsetupプロジェクトを使ってinstallerを作る方法もありますが、そちらはそちらで使っています。今回はそのまま使わせるケースを想定しています。
イメージ
publish └app.exe └bin └aaa.dll └bbb.dll
自分で試したこと
いろいろ調べてみましたが、違うバージョンのvisual studioの説明ばかりでどうやればよいのかわかりません。
バージョンが変わってもだいたい同じだろうとは思うのですが、見つかった情報を参考にビルド出力パスを編集したりしてもうまくいきません。そもそもexeとそれ以外の出力先を分けたい(階層が1つずれているだけですが)わけなので、出力パスを1つ設定するだけで指定できるのか甚だ疑問です。
ちなみに話題のChatGPTにも聞いてみました。解決しませんでした。以下のような会話になりました。
私)
visual studio2022でwindows formアプリケーションを作っています。発行すると出力フォルダにexeやdllなどのファイルが出力されます。このアプリケーションを実行するときのユーザーの操作は、exeのダブルクリックのみです。ほかのファイルは見えている必要はありません。そこでexe以外を1つのフォルダにまとめて出力したいと考えました。手順を教えてください。
ChatGPTさん1回目)
Visual StudioでWindowsフォームアプリケーションを作成している場合、出力フォルダにはexeファイルの他に、必要なdllファイルやその他のファイルが自動的に出力されます。しかし、exe以外のファイルをまとめて別のフォルダに出力する方法があります。
手順は以下の通りです。
- Visual Studioのソリューションエクスプローラーで、プロジェクトを右クリックして、「プロパティ」を選択します。
- プロパティウィンドウが表示されたら、「ビルド」タブを選択します。
- 「出力パス」プロパティを変更します。例えば、プロジェクトのルートフォルダに「bin」というフォルダを作成して、そこに出力したい場合は、以下のように設定します。
出力パス: bin
※ 「\」をつけることで、出力先フォルダのルートがプロジェクトフォルダであることを示します。
- 「ビルドイベント」の「ビルド後のイベントのコマンド ライン」に以下のコマンドを追加します。
xcopy /y /s /e "$(ProjectDir)$(TargetName).*" "$(ProjectDir)$(OutDir)"
※ 上記コマンドは、出力先フォルダに、exeファイルを含むすべてのファイルをコピーするためのものです。
これで、ビルドすると、exeファイルを含むすべてのファイルが「bin」フォルダに出力されます。ユーザーが実行する際には、exeファイルをダブルクリックするだけで、その他のファイルは見えないようになります。
ChatGPTさん2回目)
Visual Studio 2022でも同様の方法が使えます。
プロジェクトを右クリックし、「プロパティ」を選択します。
左側のメニューで「ビルド」を選択し、「出力パス」の欄をクリックします。
出力フォルダのパスが表示されるので、その隣にある「参照」ボタンをクリックします。
ファイルを出力するディレクトリを選択します。例えば、新しく「bin」というフォルダを作成し、その中に出力したい場合は、「C:\Users\UserName\Documents\Visual Studio 2022\Projects\ProjectName\bin」と入力し、「OK」をクリックします。
「OK」をクリックしてプロパティウィンドウを閉じます。
アプリケーションをビルドすると、「bin」フォルダが作成され、その中に必要なファイルが出力されます。ユーザーは、exeファイルのみをダブルクリックしてアプリケーションを実行できます。
注意点としては、出力先のフォルダを手動で作成する必要があることと、他のファイルが隠れているわけではないため、セキュリティに関する問題には注意が必要です。

回答3件
あなたの回答
tips
プレビュー