我正在使用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:没有对任何程序集进行签名。
检查.vcxproj文件中的根命名空间是否正确:
<RootNamespace>YourNameSpace</RootNamespace>
OneScott在http://www.pcreview.co.uk/forums/dotfuscator-vs-resourcemanager-ctor-t3403701.html这个问题在Dotfuscator的知识库中得到了解决,该知识库仅对社区版的注册用户可用:http://www.preemptive.com/support/dotfuscator/KnowledgeBase/CommunityEdition.html。