0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

F#でなんかアプリを作ろうと思ったら、再配布ランタイムライブラリが多すぎるよ

Posted at

結論

タイトルの通り、F#でなんかアプリケーションを書こうかな、と思いました。
とりあえずHelloWorldを書いてみたら、Releaseディレクトリ下に大量のdllがコピーされたので、びっくりした。
というか、これだけのdllを再配布しないといけないのはダメだよー。
Roslynもそうだけど、Microsoftのプロジェクトなんだから、.NETFrameworkのランタイムに全部含めてほしいな、という内容。


はじまり(サンプルコードを書いてみた)

という事で、VisualStudio2019で新規プロジェクトを作って、対象フレームワークは、.NETFramework4.6.1ぐらいにして、、、

Program.fs
[<EntryPoint>]
let main argv =
    let message = from "F#" // Call the function
    printfn "Hello world %s" message
    System.Console.WriteLine("aaaaaaa");
    0 // return an integer exit code

テンプレートのままです。
F#のクラスの呼び出しは、「.(ドット)」なんですねー。

ということで、リビルドしてみる。


そして、ディレクトリを見てびっくりした

C:\FsTestConsole\FsTestConsole\bin\Release>dir /s /b /a-d
C:\FsTestConsole\FsTestConsole\bin\Release\net461\FSharp.Core.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\FsTestConsole.exe
C:\FsTestConsole\FsTestConsole\bin\Release\net461\FsTestConsole.exe.config
C:\FsTestConsole\FsTestConsole\bin\Release\net461\FsTestConsole.pdb
C:\FsTestConsole\FsTestConsole\bin\Release\net461\Microsoft.Win32.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\netstandard.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.AppContext.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Collections.Concurrent.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Collections.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Collections.NonGeneric.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Collections.Specialized.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ComponentModel.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ComponentModel.EventBasedAsync.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ComponentModel.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ComponentModel.TypeConverter.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Console.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Data.Common.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.Contracts.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.Debug.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.FileVersionInfo.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.Process.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.StackTrace.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.TextWriterTraceListener.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.Tools.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.TraceSource.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Diagnostics.Tracing.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Drawing.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Dynamic.Runtime.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Globalization.Calendars.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Globalization.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Globalization.Extensions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.Compression.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.Compression.ZipFile.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.FileSystem.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.FileSystem.DriveInfo.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.FileSystem.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.FileSystem.Watcher.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.IsolatedStorage.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.MemoryMappedFiles.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.Pipes.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.IO.UnmanagedMemoryStream.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Linq.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Linq.Expressions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Linq.Parallel.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Linq.Queryable.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Http.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.NameResolution.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.NetworkInformation.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Ping.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Requests.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Security.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.Sockets.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.WebHeaderCollection.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.WebSockets.Client.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Net.WebSockets.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ObjectModel.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Reflection.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Reflection.Extensions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Reflection.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Resources.Reader.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Resources.ResourceManager.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Resources.Writer.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.CompilerServices.VisualC.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Extensions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Handles.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.InteropServices.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.InteropServices.RuntimeInformation.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Numerics.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Serialization.Formatters.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Serialization.Json.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Serialization.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Runtime.Serialization.Xml.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Claims.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Cryptography.Algorithms.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Cryptography.Csp.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Cryptography.Encoding.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Cryptography.Primitives.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Cryptography.X509Certificates.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.Principal.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Security.SecureString.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Text.Encoding.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Text.Encoding.Extensions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Text.RegularExpressions.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.Overlapped.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.Tasks.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.Tasks.Parallel.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.Thread.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.ThreadPool.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Threading.Timer.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.ValueTuple.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.ReaderWriter.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.XDocument.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.XmlDocument.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.XmlSerializer.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.XPath.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\System.Xml.XPath.XDocument.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\cs\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\de\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\es\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\fr\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\it\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\ja\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\ko\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\pl\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\pt-BR\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\ru\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\tr\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\zh-Hans\FSharp.Core.resources.dll
C:\FsTestConsole\FsTestConsole\bin\Release\net461\zh-Hant\FSharp.Core.resources.dll

fsconsole.png

Releaseディレクトリ以下にファイルが113個で6MB。....HelloWorldだけなのに...

C:\FsTestConsole\FsTestConsole\bin\Release>dir net461\FsTestConsole.exe
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は CA06-E844 です

 C:\FsTestConsole\FsTestConsole\bin\Release\net461 のディレクトリ

2023/09/26  16:48             8,192 FsTestConsole.exe
               1 個のファイル               8,192 バイト

自分が書いたHelloWorldの "FsTestConsole.exe" はたった8kB

たった 8kBのために、6MBのランタイムのDLL....orz

これ、全部一緒に配布しなきゃいけないんですかね!?
実行環境のOSに入っている.NETFramework4系のランタイムでは代替できないんですかね!?

(Releaseディレクトリ下に .pdb ファイルが作成されるのにも、少し違和感...)


以上

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?