为何Release文件夹与发布输出文件夹的.deps.json文件大小存在差异?
Why the .deps.json File Size Differs Between Build and Publish in .NET Core 2.0?
嘿,这个问题我在做.NET Core 2.0项目的时候刚好碰到过,当时也好奇了半天,后来查了官方文档和实践验证搞明白了,主要是这几个原因:
编译(Build)生成的.deps.json是项目级精简版:
编译阶段的核心是把你的代码转换成IL文件,生成的.deps.json只记录当前项目直接引用的依赖项、它们的版本以及开发环境下的本地路径,仅仅满足开发时运行程序的需求,内容相对简洁,所以体积更小。发布(Publish)生成的.deps.json是部署完整版:
发布操作是为了把项目打包成可部署的产物,这个过程会做更多的依赖处理:- 递归解析所有传递依赖(就是你引用的包依赖的其他包),把这些深层依赖的详细信息都写入文件;
- 如果是框架依赖发布,会明确标注目标环境需要的.NET Core运行时版本和对应的框架依赖包;
- 还会加入部署相关的配置项,比如不同操作系统的兼容性标记、依赖文件的部署路径映射等,这些额外内容自然会让文件体积变大。
发布时的依赖优化处理:
.NET Core 2.0的发布过程会对依赖做一些部署前的优化(比如部分依赖的合并、路径整理),这些优化后的依赖关系也会被完整记录到.deps.json里,而编译阶段不会做这些操作,所以发布后的文件会比编译后的多出不少内容。
举个简单的例子:编译后的.deps.json可能只列了你项目直接引用的Newtonsoft.Json,但发布后的文件里会同时包含Newtonsoft.Json依赖的System.Runtime.CompilerServices.Unsafe等传递依赖,还有运行时需要的System.Private.CoreLib相关的框架依赖信息,这些都是体积增加的核心原因。
内容的提问来源于stack exchange,提问作者Uthen
相关产品推荐
相关产品推荐

