如何仅发布所需的依赖项?

6
如果我在Visual Studio 2017中创建一个“Hello World”的.NET Core C#控制台应用程序并运行。
dotnet publish -c Release -r win10-x64 --self-contained

生成的publish文件夹中有215个文件,总共62MB,其中包括整个.NET框架,而应用程序并没有使用。例如,它包含了System.Security.Cryptography.OpenSsl.dll

这是“Microsoft.NETCore.App”依赖项的一部分,似乎我无法手动编辑。如何将其缩减为应用程序实际使用的内容?


2
请参见:https://github.com/dotnet/core/blob/master/samples/linker-instructions.md - omajid
2个回答

4
根据部署文档
与FDD不同,自包含部署(SCD)不依赖于目标系统上共享组件的存在。所有组件,包括.NET Core库和.NET Core运行时,都与应用程序一起提供。
如果您不想将整个.NET Core运行时与应用程序一起部署,则应使用依赖框架部署(FDD)而不是自包含部署(SCD)。
dotnet publish -c Release

未来,CoreRT运行时(目前仍在开发中)旨在允许创建一个单独的预编译本地可执行文件,该文件特定于运行时,不需要任何其他文件。

参考:有没有办法在.NET Core中只使用单个文件运行控制台应用程序?


我说的不是运行时,而是像我在帖子中提到的那种不必要的框架DLL。 - Asik
1
由于Microsoft.NETCore.App依赖于它们,所以您需要它们。我曾问过一个类似的问题(https://dev59.com/QlcP5IYBdhLWcg3wH24Z#44840894),虽然微软正在开发[CoreRT运行时](https://github.com/dotnet/corert)以在未来制作单个部署文件,但这仍然是在进行中的工作。 - NightOwl888
有没有办法在FDD模式下发布使用Core 2.0编写的Windows服务?我被卡在这里了,因为3个微服务在我的主机上占用了310MB的存储空间 - 真是荒谬,我快放弃核心开发了! - Code Guru
我也曾经感到困惑(为什么有这么多的dll文件被复制到发布文件夹中),所以感谢你提出了有意义的问题并给出了答案。因此,我现在选择自包含部署,因为这样我不必在服务器上单独安装运行时,并且可以完全控制我的应用程序环境。 - FredyWenger

3

还有第三个选项: "基于框架的可执行文件(FDE)"

您需要使用 --self-contained false,例如:

dotnet publish <xyz.csproj> -c Release -r win-x64 --self-contained false

“发布”文件夹仍包含一些Microsoft.*.dll文件,但数量要少得多。在我的情况下,以前的发布文件夹大小为84MB,现在仅为12MB!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接