You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI项目Obfuscar混淆报错:无法找到Mono.Android程序集

问题原因分析

1. 目标程序集路径错误

.NET MAUI的Android构建输出结构和普通.NET项目不同,Release模式下,编译后的MyProj.dll并非直接存放在obj\Release\net8.0-android根目录,而是位于对应CPU架构的子目录中(比如android-arm64、android-x86_64等),导致Obfuscar找不到指定的dll文件。

2. Mono.Android程序集搜索路径缺失

Mono.Android.dll属于.NET MAUI的Android平台依赖,它并不在你的项目输出目录(obj/bin)中,而是存储在.NET Android SDK或NuGet包缓存目录里。Obfuscar默认只会扫描InPath指定的目录,因此无法自动找到该依赖程序集。

解决方案

步骤1:修正目标程序集的路径

  1. 打开你的MAUI项目的bin\Release\net8.0-android目录,找到对应目标架构的子文件夹(比如你要打包的是arm64,就进入android-arm64)。
  2. 确认该子文件夹下存在MyProj.dll,然后修改Obfuscar配置中的InPath为这个实际路径:
    <Var name="InPath" value="C:\Path\To\My\Project\bin\Release\net8.0-android\android-arm64" />
    

步骤2:添加Mono.Android的搜索路径

在Obfuscar配置文件中添加<SearchPath>节点,指向Mono.Android.dll所在的目录,以下是两个常见的路径(根据你的.NET MAUI版本调整版本号):

  • .NET Android SDK路径(以.NET 8为例):
    <SearchPath path="C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.43\lib\net8.0" />
    
  • NuGet缓存路径(版本号需匹配你的项目依赖):
    <SearchPath path="%USERPROFILE%\.nuget\packages\mono.android\12.0.0.0\lib\net6.0-android" />
    

步骤3:验证配置并重新执行混淆

修改完成后的完整配置示例:

<Obfuscator>
  <Var name="InPath" value="C:\Path\To\My\Project\bin\Release\net8.0-android\android-arm64" />
  <Var name="OutPath" value="C:\Path\Obfuscated" />
  
  <Module file="$(InPath)\MyProj.dll" />

  <!-- 添加平台依赖的搜索路径 -->
  <SearchPath path="C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.43\lib\net8.0" />
  <SearchPath path="%USERPROFILE%\.nuget\packages\mono.android\12.0.0.0\lib\net6.0-android" />
  
  <Settings>
    <EncryptStrings value="true" />
    <RemoveUnused value="true" />
    <Optimize value="true" />
  </Settings>

  <Rename>
    <RenamePublic value="true" />
    <Skip type="System.Object" />
    <Skip type="System.String" />
    <Skip type="System.Console" />
  </Rename>

  <Output path="$(OutPath)" />
  <Map file="$(OutPath)\Map.xml" />
</Obfuscator>

保存配置后,重新执行Obfuscar.Console.exe obfuscar.xml即可。

额外注意事项

  • 如果你的项目启用了代码裁剪(Publish时默认开启),建议先构建未裁剪的Release版本再执行混淆,否则可能导致混淆后的程序集缺少必要的依赖。
  • 确认所有<SearchPath>中的路径都存在,版本号与你的项目所使用的.NET MAUI版本一致。

内容的提问来源于stack exchange,提问作者Nazarii Balyshyn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 03:35:11