0

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, Disposable`1 stream, 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: 我在我的(大型)项目中将其缩小到一个特定的枚举。当我从混淆中排除该枚举时,混淆运行正常。当我混淆该枚举时,会引发异常。情况如下。有问题的枚举位于完全混淆的库中。但是,枚举也用于单元测试。带有单元测试的程序集也是混淆的一部分(我想在交付的实际混淆的库上运行我的单元测试),但其中的测试类没有被混淆。这意味着只有在完全混淆的库中定义的类/枚举的引用才应该在测试程序集中更新。当我从单元测试中删除此枚举的使用时,混淆也再次起作用。

4

0 回答 0