编译.NET Standard可移植库时如何减小DLL体积?(Xamarin场景)
减小UWP项目中.NET Standard库DLL体积的方案
编译阶段优化
启用Release模式编译
在Azure DevOps的dotnet build/dotnet pack命令中指定Release配置:dotnet build --configuration Release dotnet pack --configuration Release --no-build同时在.NET Standard库的项目文件中添加以下配置,进一步优化:
<PropertyGroup Condition="'$(Configuration)'=='Release'"> <Optimize>true</Optimize> <DebugType>pdbonly</DebugType> <!-- 或设为none完全移除调试符号 --> <DebugSymbols>false</DebugSymbols> </PropertyGroup>启用代码裁剪与.NET Native编译(UWP专属)
对于UWP项目,启用.NET Native工具链,将IL编译为本地代码并裁剪未使用部分,在UWP项目文件中添加:<PropertyGroup Condition="'$(Configuration)'=='Release'"> <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain> </PropertyGroup>同时在.NET Standard库的项目文件中启用未使用代码裁剪:
<PropertyGroup> <TrimUnusedCode>true</TrimUnusedCode> </PropertyGroup>清理冗余依赖
- 检查并移除库中未使用的NuGet包引用,使用
dotnet list package命令排查依赖。 - 将开发依赖(如测试框架、代码分析工具)标记为仅开发使用,避免打包进生产DLL:
<PackageReference Include="xunit" Version="2.4.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference>
- 检查并移除库中未使用的NuGet包引用,使用
优化嵌入式资源
对库中嵌入的图片、配置文件等资源进行预压缩:- 使用PNG压缩工具处理图片资源。
- 对文本类资源(如JSON、XML)进行压缩后再嵌入。
编译后优化
合并依赖DLL
使用ILRepack工具将多个依赖DLL合并到主库DLL中,减少文件数量与元数据冗余。在Azure DevOps pipeline中添加步骤执行:ILRepack /out:YourMergedLibrary.dll YourNetStandardLibrary.dll Dependency1.dll Dependency2.dll注意:合并前需验证依赖DLL是否允许合并,避免UWP运行时兼容性问题。
裁剪冗余代码
使用dotnet trim工具移除DLL中未被使用的代码与元数据(适用于.NET Core/.NET 5+兼容的.NET Standard库):dotnet trim YourNetStandardLibrary.dll --output TrimmedLibrary.dll裁剪后务必全面测试功能,防止误删必要代码。
压缩DLL文件
使用UPX工具对编译后的DLL进行无损压缩,显著减小体积:upx --best YourNetStandardLibrary.dll注意:压缩后需验证UWP项目能否正常加载该DLL,部分受签名限制的场景可能不适用。
额外注意事项
- 针对UWP平台添加条件编译指令,移除非UWP专属代码:
#if !WINDOWS_UWP // 非UWP平台代码,编译UWP时会被排除 #endif - 所有优化步骤完成后,必须进行完整的功能测试与性能测试,确保不会引入运行时错误。
内容的提问来源于stack exchange,提问作者SRRIN
相关产品推荐
相关产品推荐

