默认裁剪的所有程序集
默认情况下,裁剪功能现在会裁剪控制台应用中的所有程序集。 此更改仅影响使用 PublishTrimmed=true
发布的应用,并且只会中断具有现有裁剪警告的应用。 它还仅影响不使用 Windows 桌面、Android、iOS、WASM 或 ASP.NET SDK 的普通 .NET 应用。
旧行为
以前,仅裁剪在库项目文件中使用 <IsTrimmable>true</IsTrimmable>
选择加入的程序集。
新行为
从 .NET 7 开始,裁剪功能默认裁剪应用中的所有程序集。 以前使用 PublishTrimmed
的应用可能无法在 .NET 7 中运行。 但是,只有带有裁剪警告的应用才会受到影响。 如果应用没有裁剪警告,则行为更改不应造成任何不利影响,并且可能会减小应用大小。
如果应用确实有裁剪警告,则可能会出现行为变化或异常。 例如,使用 Newtonsoft.Json
或 System.Text.Json
而不生成源代码来序列化和反序列化用户项目中的类型的应用可能在更改之前已经运行,因为用户项目中的类型已完全保留。 但是,会出现一个或多个裁剪警告(警告代码 ILxxxx
)。 现在,将剪裁用户项目中的类型,序列化可能会失败或产生意外结果。
引入的版本
.NET 7
中断性变更的类型
此项更改可能会影响源兼容性。
更改原因
此更改有助于减小应用大小,而无需用户明确选择加入,并且符合用户对整个应用进行裁剪的期望,除非另有说明。
建议的操作
最佳解决方案是解决应用程序中的所有裁剪警告。 有关解决自己的库中的警告的信息,请参阅裁剪警告简介。 对于其他库,请联系作者请求他们解决警告,或选择已支持裁剪的其他库。 例如,可以使用支持裁剪的源生成切换到 System.Text.Json,而不是使用 Newtonsoft.Json
。
若要还原到以前的行为,请将 TrimMode
属性设置为 partial
,这是 .NET 7 之前的行为。
<TrimMode>partial</TrimMode>
默认 .NET 7+ 值为 full
:
<TrimMode>full</TrimMode>
受影响的 API
无。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈