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