Blazor Server(.NET 6.0)中如何让Crossgen2编译时不包含IL代码?
Blazor Server (.NET 6.0) 移除Crossgen2编译后程序集托管IL代码的方法
.NET 6+ 提供了原生配置参数,支持Crossgen2编译时剥离程序集中的托管IL代码,仅保留ReadyToRun生成的原生代码,配置方法如下:
配置步骤
- 打开你的Blazor Server项目的
.csproj工程文件,在<PropertyGroup>节点中添加以下配置:
<PropertyGroup> <!-- 原有已配置的ReadyToRun参数 --> <PublishReadyToRun>true</PublishReadyToRun> <!-- 新增两个参数用于剥离IL --> <PublishReadyToRunStripIL>true</PublishReadyToRunStripIL> <PublishReadyToRunEmitSymbols>false</PublishReadyToRunEmitSymbols> </PropertyGroup>
- 执行发布命令生成最终程序集,注意普通编译(
dotnet build)不会触发ReadyToRun逻辑,必须使用发布命令:dotnet publish -c Release -r [目标运行时标识符,例如win-x64、linux-x64]
注意事项
- 剥离IL后程序集将不支持依赖原始IL的运行时逻辑,包括但不限于:动态反射读取IL、AOP动态代理、运行时JIT回退、第三方库的IL解析逻辑,启用前请确认你的业务代码和依赖库无此类需求
- 若发布后运行出现类型加载失败、方法缺失等异常,可临时将
PublishReadyToRunStripIL设置为false验证是否为IL剥离导致的兼容性问题 - 该配置仅对当前项目生成的程序集生效,第三方依赖的NuGet包如果未预先做ReadyToRun编译,默认仍会保留IL代码
内容的提问来源于stack exchange,提问作者Alexey M.
相关产品推荐
相关产品推荐

