C ++ / CLI混淆程序集抛出MissingManifestResourceException

时间:2013-08-29 12:55:39

标签: .net visual-studio-2012 c++-cli obfuscation dotfuscator

我正在使用Dotfuscator Pro 4.10来混淆使用VS 2012构建的应用程序..NET代码包含托管以及非托管C ++ / CLI代码,因此使用/ clr进行编译。

我的解决方案包含很多项目。我只允许重命名作为混淆。此外,由于所有程序集/应用程序都在dotfuscator项目中,因此我不在库模式下运行。因此,所有接口都被加扰。

当我对程序集进行模糊处理时,一切正常,但对于程序集(让我们称之为 A.dll )。如果我禁用 A.dll 的模糊处理,则应用程序可以正常运行。如果我为 A.dll 启用模糊处理,我会得到:

  

错误:System.Resources.MissingManifestResourceException

     

消息:找不到适合指定文化或中性文化的资源。确保在编译时将“ ahe.resources ”正确嵌入或链接到程序集“ A.dll ”中,或者所需的附属程序集是可加载和完全签名的。

ahe A.dll 中窗口表单的加扰名称,此处抛出异常(来自 ApplyResources()):

void InitializeComponent( void )
{
    this->components = (gcnew System::ComponentModel::Container());
    System::ComponentModel::ComponentResourceManager^resources = (gcnew System::ComponentModel::ComponentResourceManager( A::typeid ));

    // ...

    resources->ApplyResources( this->mpMyControl, L"mpMyControl" ); // Exception thrown here.

    // ...
}

资源在 A.resx 中正确定义(它在混淆之前有效)。

请注意,此类代码在其他程序集中的许多位置使用,当我不允许对有问题的程序集 A.dll 进行模糊处理时,它可以正常工作。

那么,有人知道如何解决这个问题吗?随意询问更多信息/细节,我不知道什么可能是重要的。

谢谢!

编辑1 :没有任何程序集已签名。

2 个答案:

答案 0 :(得分:0)

检查.vcxproj文件中的根命名空间是否正确:

<RootNamespace>YourNameSpace</RootNamespace>

答案 1 :(得分:0)

一个 Scott 报道了 http://www.pcreview.co.uk/forums/dotfuscator-vs-resourcemanager-ctor-t3403701.html 这个问题在Dotfuscator的知识库中得到解决,该知识库仅适用于社区版的注册用户: http://www.preemptive.com/support/dotfuscator/KnowledgeBase/CommunityEdition.html

相关问题