问题描述
Obfuscar 2.2.28为混淆的项目抛出ResolutionException:
Unhandled Exception: Mono.Cecil.ResolutionException: Failed to resolve A.h
at Mono.Cecil.Mixin.CheckedResolve(TypeReference self)
at Mono.Cecil.MetadataBuilder.GetConstantType(TypeReference constant_type,Object constant)
at Mono.Cecil.MetadataBuilder.AddConstant(IConstantProvider owner,TypeReference type)
at Mono.Cecil.MetadataBuilder.AddField(FieldDeFinition field)
at Mono.Cecil.MetadataBuilder.AddFields(TypeDeFinition type)
at Mono.Cecil.MetadataBuilder.AddType(TypeDeFinition type)
at Mono.Cecil.MetadataBuilder.AddTypes()
at Mono.Cecil.MetadataBuilder.BuildTypes()
at Mono.Cecil.MetadataBuilder.BuildModule()
at Mono.Cecil.MetadataBuilder.BuildMetadata()
at Mono.Cecil.ModuleWriter.<>c.<BuildMetadata>b__2_0(MetadataBuilder builder,MetadataReader _)
at Mono.Cecil.ModuleDeFinition.Read[TItem,TRet](TItem item,Func`3 read)
at Mono.Cecil.ModuleWriter.Write(ModuleDeFinition module,disposable`1 stream,WriterParameters parameters)
at Mono.Cecil.ModuleWriter.WriteModule(ModuleDeFinition module,WriterParameters parameters)
at Obfuscar.Obfuscator.SaveAssemblies(Boolean throwException)
at Obfuscar.Obfuscator.RunRules()
at Obfuscar.Program.Main(String[] args)
我确实更改了一些混淆属性(添加了更多要枚举的枚举),然后开始出现此错误。
我混淆的项目针对.NET Framework 4.6.2。
更新: 我也尝试过使用2.2.25和2.2.26版本,结果是相同的。不幸的是,没有日志文件,因此很难找到导致问题的原因。
更新2: 在我的(大型)项目中,我已将其范围缩小到一个特定的枚举。当我从混淆中排除该枚举时,混淆运行良好。当我混淆该枚举时,将引发异常。 情况如下。有问题的枚举位于完全混淆的库中。但是,枚举还用于单元测试中。带有单元测试的程序集也是混淆的一部分(我想在交付的实际混淆的库上运行我的单元测试),但是不会混淆其中的测试类。这意味着只应在测试程序集中更新对完全混淆的库中定义的类/枚举的引用。当我从单元测试中删除该枚举的用法时,混淆也将再次起作用。因此,这似乎是对引起问题的非混淆类中的混淆枚举的引用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)