🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

27893閲覧

単体で使えるexeファイルの生成。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2019/10/13 08:27

前提・実現したいこと

Visual Studio CodeでC#を扱っていて、dotnet new consoleで作成したプロジェクトで、
exeファイルの生成を試みているのですが、
dllファイル等も同時に吐き出され、このdllファイルと同階層にexeファイルが配置していないと
exeファイルが起動しない状態です。
dllファイル不要で、exeファイルのみで動くように生成するにはどうすればよいですか?
ご教示お願い致します。

該当のソースコード

dotnet new console

でコンソールプロジェクトを作成しました。

試したこと

下記どちらで作成しても、同階層にあるdllファイルを必要としているようでした。

dotnet build
publish -c Release

Visual Studio でフォームアプリケーションを作成した際は、
単体のexeファイルで起動できるので、
dotnet new consoleでも、単体で起動するexeファイルを生成できるのではないかと考えています。

補足情報(FW/ツールのバージョンなど)

Windows 10

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

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

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

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

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

Zuishin

2019/10/13 08:39

Visual Studio でもできないと思います。質問を編集し、どのようなプロジェクトならそれが可能なのか、こちらで再現できるレベルで具体的に書いてください。
gentaro

2019/10/13 18:42

バージョン書かないから想像で答えるハメになってるっぽいので、使ってるモノのバージョンはちゃんと書きましょう。
guest

回答2

0

ベストアンサー

こんにちは。

.NET Core SDK 3.0 以降を利用しているのであれば、csproj 上で PublishSingleFile プロパティに true をセットすることでシングルバイナリを出力することができます。

publish コマンドは以下のようにします。

dotnet publish -c Release -r win-x64 -o output

シングルバイナリを出力する関係上、ランタイムの指定が必須になります。ランタイムの ID についてはこちらを参考にしてください。.NET Core Runtime IDentifier (RID) catalog | Microsoft Docs

また、publish 時に不要な API を同梱しないための PublishTrimmed プロパティも存在するので、リリース目的であればこちらも同時に利用することでより良い結果を得られると思います。


csproj

1<Project Sdk="Microsoft.NET.Sdk"> 2 3 <PropertyGroup> 4 <OutputType>Exe</OutputType> 5 <TargetFramework>netcoreapp3.0</TargetFramework> 6 ... 7 8 <PublishSingleFile>true</PublishSingleFile> 9 <PublishTrimmed>true</PublishTrimmed> 10 </PropertyGroup> 11 12 ... 13 14</Project>

投稿2019/10/13 10:19

tamoto

総合スコア4237

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

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

退会済みユーザー

退会済みユーザー

2019/10/13 12:53

ご回答ありがとうございます。 > dotnet --version 2.1.300 と出力されたのですが、この環境は.NET Core SDK 3.0 未満ということでしょうか? この環境だと、ご回答者様にいただいたご回答方法ではできないということですか?
tamoto

2019/10/13 13:59

.NET Core 2.1 を使っているようですね。 本回答の機能は SDK 3.0 で搭載されたものなので、2.2 以前を使い続けるのであれば利用できないものと思います。 この機能を使い込んだわけではないので正しいことは言えませんが、利用するにはプロジェクト自体のターゲットも netcoreapp3.0 である必要があるようです。
退会済みユーザー

退会済みユーザー

2019/10/13 17:34

ご回答ありがとうございます。 SDK 3.0にバージョンアップして、単体のexeファイルで動作することを確認致しました。 1点質問させていただきたいのですが、 dotnet publish -c Release -r win-x64 -o output ですが、 これは、csprojで <RuntimeIdentifier>win-x64</RuntimeIdentifier> と追記して、 dotnet publish -c Release -o output と実行したのと同等という認識で合っていますか?
tamoto

2019/10/14 11:02

はい、同等です。project 側で指定してあればオプションは省略できます。
退会済みユーザー

退会済みユーザー

2019/10/15 06:58

ご回答ありがとうございます。 とても勉強になりました。 ご教示ありがとうございました。
guest

0

C#の環境無いので試して無いんですが、
'c# dll include exe' で調べると色々出ますよ。

下記を見ればよいかと。(2行名はVisuatstudio向けでした。)
https://mitosuya.net/merge-dll-into-exe
https://unofficialism.info/posts/tips-visual-studio-csharp-merge-exe-and-dll/

投稿2019/10/13 08:58

編集2019/10/13 09:00
oikashinoa

総合スコア2826

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問