我正在使用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 :没有任何程序集已签名。
答案 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。