【问题标题】:Cannot load obfuscated assembly无法加载混淆程序集
【发布时间】:2010-11-30 01:09:43
【问题描述】:

我是第一次使用 dotfuscator。我的项目是用 C# 和 .NET 3.5 编写的,它有一个主程序和一些插件;这是加载插件的代码片段:

// Load the file
Assembly asm = Assembly.LoadFile( pluginPath );

// Instantiate the types I need
foreach( Type type in asm.GetTypes() )
{
    ...
}

现在的问题是:如果我不混淆一切都很好,但是当我使用 dotfuscator asm.GetTypes() 时抛出一个 ReflectionTypeLoadException 说

The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我用谷歌搜索了几个小时没有结果。提前致谢。

编辑:经过一些研究和调试,我认为这是清单中的问题,因为反射无法看到(或加载)程序集中的类型。我用 Reflector 打开了混淆程序集,但一切似乎都很好。

【问题讨论】:

    标签: .net reflection assemblies load dotfuscator


    【解决方案1】:

    您的程序集是强命名的还是 Authenticode 签名的?混淆会改变程序集的结构,为了在混淆后使用它们,您需要退出它们。

    Dotfuscator 的商业版本支持退出程序集(强名称和 Authenticode),而如果您使用免费的社区版,则需要在 Dotfuscator 中作为后期构建步骤退出。

    【讨论】:

      【解决方案2】:

      混淆部分通过重命名部分或全部方法名称、类型名称等来起作用。

      使用混淆时,反射通常会失败。如果幸运的话,在选择要混淆的什么时,您可以有选择性,但这需要注意细节。

      【讨论】:

      • 我尝试在 dotfuscator 中禁用我所知道的尽可能多的东西,并重命名。我还尝试使用 [System.Reflection.Obfuscation( Exclude=true )] 标记至少一个类
      【解决方案3】:

      我认为混淆不能很好地与反射配合使用。事实上,我认为这是使用混淆时的首要权衡。

      请参阅this 链接了解如何克服需要反映的类型

      【讨论】:

      • 官方指南说了什么,我认为代码应该可以工作。无论如何,非常感谢你的链接,我很快就会评估另一个混淆器
      猜你喜欢
      • 2015-06-09
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多