質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

2552閲覧

【Visual Studio】発行時にexe以外のファイルをフォルダにまとめてしまいたい。

mogassa

総合スコア1

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

2グッド

2クリップ

投稿2023/04/09 11:25

解決したいこと

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以外のファイルをまとめて別のフォルダに出力する方法があります。
手順は以下の通りです。

  1. Visual Studioのソリューションエクスプローラーで、プロジェクトを右クリックして、「プロパティ」を選択します。
  2. プロパティウィンドウが表示されたら、「ビルド」タブを選択します。
  3. 「出力パス」プロパティを変更します。例えば、プロジェクトのルートフォルダに「bin」というフォルダを作成して、そこに出力したい場合は、以下のように設定します。

出力パス: bin
※ 「\」をつけることで、出力先フォルダのルートがプロジェクトフォルダであることを示します。

  1. 「ビルドイベント」の「ビルド後のイベントのコマンド ライン」に以下のコマンドを追加します。

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ファイルのみをダブルクリックしてアプリケーションを実行できます。
注意点としては、出力先のフォルダを手動で作成する必要があることと、他のファイルが隠れているわけではないため、セキュリティに関する問題には注意が必要です。

TN8001😄を押しています
sheephuman👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2023/04/09 22:40

> 違うバージョンのvisual studioの説明ばかりでどうやればよいのかわかりません。 ってことですが、その違うバージョンのVisualStudioではそれが可能なんでしょうか。
dodox86

2023/04/10 03:41

質問文中に混ざったChatGPTさんの回答でもって紛らわしさが増していますが、出力パスで指定したパスには実行に必要なファイルが全て含まれます。これはVisual Studioのバージョンに関わりませんね。
TN8001

2023/04/10 09:09

[[Q&A] exeと同階層にあるファイルをサブフォルダにまとめたい - Qiita](https://qiita.com/wifrstfasnriov/questions/3e72b380ab9e70c6a730) > teratailでは、マルチポスト※の推奨はしていません。 > やむを得ず複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。 また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。 [ヘルプ|他のサービスにも質問投稿をしたい(してしまった)](https://teratail.com/help#posted-otherservice)
TN8001

2023/04/14 08:48

向こうには反応あるのにこっちは無反応なのなんなん?
mogassa

2023/05/03 16:52

回答いただいたみなさま、大変失礼いたしました。こういうサービスに詳しくなく、Quitaと似たようなサイトを見かけて怖いもの見たさで投稿しましたが、少し待ってあんまり回答つかないサイトなのかなと思って放置してしまいました。他サイトの話をどこまですべきかわかりませんが、結論としてはQuitaでいただいた回答を踏まえてやるべきでない実装と判断しました。(https://qiita.com/wifrstfasnriov/questions/3e72b380ab9e70c6a730)
guest

回答3

0

偶然ですがQiitaで全く同じ内容について回答しました。
非常に簡単なため、提示します。

以下が正確な手順です。

参考リンク
https://qiita.com/waokitsune/items/0b64e5d87d4b5f7435ed

まず、提示した記事内にはないですが
App.configを作成します
image.png

image.png

<probing privatePath="bin" />を追加します。

binフォルダを作成し、dllを全部突っ込みます。
image.png

ビルドすれば完了です。
Dllを使った機能も正常に動作する事を検証済みです。

尚、余談ですがChatGPTには向き不向きがあり、正確な手順が必ずしも生成されるとは限らない場合があります。
質問内容も詳細を提示した方がいい場合と出力結果を偏向させないため、シンプルにした方がいい場合があります。
例えば、「Visual Studio 2022で読み込むdllを別のフォルダに纏める方法を提示」の方がスマートに出力される場合があります。

以下はシンプルに質問した結果です。
イメージ説明

この質問文を徐々に詳細にしていくのです。

Visual Studio2022でApp.Configを使用してDllファイルをフォルダに纏める方法を提示

イメージ説明

妙に専門家ぶってプロンプト?的なものを書く人が多いんですが、ちょっとしたお笑いですね
ちなみにこの方法でもあまり正確ではないか、迂遠な方法が提示されるようです。

投稿2023/04/12 05:33

編集2023/04/12 05:51
sheephuman

総合スコア112

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Visual Studio2022でこのような発行の仕方をする設定方法をご教示ください。

「自己完結」のうえ「単一ファイルの作成」はイヤだということでしょうか?

今のところ無理じゃないですかね。関連イシューがいっぱいあるがこのあたり?
Unable to specify a subdirectory for assembly loading · Issue #10366 · dotnet/sdk

当該イシューでこちらが上がっていますが、私は確認しておりません。
nulastudio/NetBeauty2: Move a .NET Framework/.NET Core app runtime components and dependencies into a sub-directory and make it beauty.


これをそのままユーザーに使わせることを考えると、exeがほかのファイルに埋もれてしまって使いにくいです。
フォルダを開けばexeがすぐに見つかるよう、exe以外のファイルをサブフォルダにまとめてしまいたいです。

あくまでユーザビリティの話であれば、さらに上のフォルダにショートカットでも作ったらどうですか?
windows ショートカット 相対パス - Google 検索

投稿2023/04/10 09:10

TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2023/04/14 08:50

「向こうに書けよ」という話なんだが、QiitaのQ&Aはクソ過ぎて使いたくないので^^; > 1. explorer.exeが既定の場所にある前提のショートカットなので環境に依存してしまうのでは?という懸念。 > 2. 引数でappX.exeのパスを渡しているだけで実行しているのはexplorer.exeなので、アイコンがexplorer.exeのものになる。 [[Q&A] exeと同階層にあるファイルをサブフォルダにまとめたい - Qiita](https://qiita.com/wifrstfasnriov/questions/3e72b380ab9e70c6a730#answer-597eb04e3498116e4f47) 本体を起動するだけのランチャーアプリをNativeAOTで作るとか?^^; 本体でできれば話が早いんですが、現状コンソールアプリのみのようです(「C++ によるデスクトップ開発」ワークロードを入れてください) [Native AOT deployment overview - .NET | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/core/deploying/native-aot/) <OutputType>WinExe</OutputType>にすることはできたので、コンソール窓は出さずに済みます(しなくても起動が早すぎて全く見えなかったですが^^; 「単一ファイル」がベストだと思うのですが、なにか忌避する事情があるんでしょうか?
sheephuman

2023/11/05 03:27

単一ファイルやってみましたが、元ファイルの数倍の容量になり、数百MBのファイルサイズまで肥大化します。 なんというかイメージ的にもよろしくないので。 ショートカット作成というのはいい手ですね。やってみます。
TN8001

2023/11/05 08:58

> 単一ファイルやってみましたが、元ファイルの数倍の容量になり、数百MBのファイルサイズまで肥大化します。 「フレームワーク依存」と「自己完結」があります。 [アプリケーション配置用に単一ファイルを作成する - .NET | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/core/deploying/single-file/overview?tabs=cli) 「自己完結」では当然サイズが大きくなります。 [アプリケーションの発行 - .NET | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/core/deploying/#publish-framework-dependent) それぞれ利点欠点があるので適切に選択するか、いっそユーザーに任せてもいいかもしれません^^;
guest

0

これをそのままユーザーに使わせることを考えると、exeがほかのファイルに埋もれてしまって使いにくいです。

 インストーラ不要のユーザは、そんな事を気にしないでしょう。他の解答者は流石ですね、サクッと実装出来ないなら、アイコンや実行ファイルの名前を工夫したり、リンクで代用したりするのはどうでしょう。
リリースを優先して、ユーザの要望に出てから検討するのも悪くないのでは。

投稿2023/04/10 14:14

編集2023/04/12 09:27
logres_Fan

総合スコア164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問