3

我是第一次使用 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 打开了混淆程序集,但一切似乎都很好。

4

3 回答 3

2

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

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

于 2010-11-30T16:13:21.613 回答
1

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

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

于 2010-11-30T01:48:08.780 回答
0

我认为混淆不适用于反射。事实上,我认为这是使用混淆时的首要权衡。

有关如何克服需要反映的类型,请参阅此链接

于 2010-11-30T01:46:50.140 回答