空的 C# 程序会导致输出文件大小意外过大

Empty C# program results in unexpectedly large output file size

提问人:tomato bar 提问时间:11/17/2023 最后编辑:Panagiotis Kanavostomato bar 更新时间:11/17/2023 访问量:66

问:

我遇到了一个问题,即使是没有逻辑或依赖项的最小 C# 程序也会导致输出文件大小大得惊人。我希望一个空程序产生一个小的可执行文件,但文件大小约为 140 MB。

class Program
{
    static void Main()
    {
        // Empty program
    }
}

enter image description here

C# .net

评论

3赞 Mocas 11/17/2023
这是因为自给自足。
3赞 Jon Skeet 11/17/2023
“没有逻辑或依赖关系”——你的意思是除了“完整的运行时和库”的依赖关系之外,因为你已经把它放在了独立的模式?
1赞 Panagiotis Kanavos 11/17/2023
你选择包含整个 .NET 6 运行时,并使用 Read-to-Run 编译应用程序。这至少会将一些程序集编译为本机代码,这比 IL 占用更多空间。我怀疑也没有启用修剪。无论如何,剪裁在 .NET 6 中不如在 .NET 8 中有效。如果要测试本机编译的应用程序的大小,请尝试使用 .NET 8
0赞 tomato bar 11/17/2023
我尝试下载 50 MB 的 .net 7,而我使用 .net 编译的程序是 1 MB,所以它大约是 50 MB,那么为什么独立是 140?

答:

1赞 jarmanso7 11/17/2023 #1

应将部署模式从“独立”更改为“依赖于框架”,以便不包含使项目变得如此之大的所有 .NET Core 二进制文件。

请参阅使用 Visual Studio 部署 .NET Core 应用

评论

0赞 tomato bar 11/17/2023
我不希望它依赖于.net,我希望它是独立的。但我的问题是为什么一个空项目必须是 140 MB?(我尝试了一个 12000 行代码程序,它仍然是 140 MB)
1赞 Jesse 11/18/2023
@tomatobar 一个空项目是 140 MB,因为这是运行时的大小。为了能够运行任何代码(即使是空函数),它需要运行时。因为你告诉它是独立的,所以运行时会与它打包在一起,程序仍然可以运行,而无需系统安装运行时。此外,12000 行代码比 1 MB 少了几十万行,这就是为什么文件大小保持不变的原因(因为它是相同的)。