.net 4.0 FileNotFoundException ResourceManager::GetString C++/CLI

.net 4.0 FileNotFoundException ResourceManager::GetString C++/CLI,.net-4.0,mfc,resources,c++-cli,managed,.net 4.0,Mfc,Resources,C++ Cli,Managed,我有一个启用CLR并在VS2010 SP1中使用.Net v4.0的MFC DLL。我已将名为ReportStrings.resx的新托管资源文件添加到项目的根目录中。我正在使用下面的代码访问资源。无论我在ResourceManger构造函数中输入了什么。调用rmResources->GetStringsKey时,我得到一个FileNotFoundException。异常显示找不到文件“Report.resources”。我在应用程序中搜索了Report.resources的任何引用,但没有找到

我有一个启用CLR并在VS2010 SP1中使用.Net v4.0的MFC DLL。我已将名为ReportStrings.resx的新托管资源文件添加到项目的根目录中。我正在使用下面的代码访问资源。无论我在ResourceManger构造函数中输入了什么。调用rmResources->GetStringsKey时,我得到一个FileNotFoundException。异常显示找不到文件“Report.resources”。我在应用程序中搜索了Report.resources的任何引用,但没有找到任何引用。任何帮助都将不胜感激

谢谢, 乔希

公共引用类ResourceGetter { 静态资源管理器^rmResources=gcnew ResourceManagerReport.ReportString,程序集::GetExecutionGassembly; 公众: 静态字符串^GetResourceString ^sKey { 字符串^sReturn=nullptr; String^sTime=String::Empty; 尝试 { sReturn=rmResources->GetStringsKey; } 捕获异常^ex { 前任; } 返回sReturn==nullptr?[+sKey+未找到]:sReturn; } };
好的,在创建了几个测试项目并从头开始重新创建我的应用程序项目之后,我似乎发现了问题所在。如果我在主文件的应用程序构造函数中初始化资源,那么一切都正常工作。例如,我的项目名为Report,因此我将初始化代码添加到Report.cpp文件中的CReportApp构造函数中,一切正常。谢谢你的帮助,汉斯·帕桑。我的代码如下:

资源获取者

布拉格语一次 使用名称空间系统; 使用名称空间系统::资源; 公共引用类ResourceGetter { 静态资源管理器^rmResources=nullptr; 公众: 静态吸气剂 { } 静态无效初始化 { 如果rmResources==nullptr { rmResources=gcnew ResourceManagerReport.reportString,Assembly::GetExecutionGassembly; ResourceProxy::Initializegcnew Mnc::Utilities::GetResourceDelegate&ResourceGetter::GetResource; } } 静态字符串^GetResourceString ^sKey { 字符串^sReturn=nullptr; 尝试 { 如果rmResources!=nullptr sReturn=rmResources->GetStringsKey; 其他的 System::Diagnostics::Debug::WriteLineFailed以检索资源+sKey+:返回空值。; } 捕获异常^ex { 前任; } 返回sReturn==nullptr?[+sKey+未找到]:sReturn; } }; Report.cpp

CReportApp::CReportApp { ResourceGetter::初始化; }
在可执行文件上运行ildasm.exe,双击清单并查找.mresource。它应该类似于mumble.ReportStrings.resources,其中mumble部分在您的问题中不可用。@Hans Passant-这是我在清单中找到的:.mresource public Report.ReportStrings.resources。这也是调试目录中已编译资源的名称。找不到文件“Report.resources”是打字错误还是异常实际显示为“Report.ReportStrings.resource”?我也会避免像那样初始化rmResources。最好在某个类的构造函数中执行此操作,以便确保程序集是正确的。@Hans Passant-错误显示为“Report.resources”。我尝试在ReportManager构造函数中更改基名称,它总是返回与“Report.resources”相同的错误。我已将ReportManager构造函数移动到初始化函数,并已验证是否返回了正确的程序集。我还验证了程序集是否包含“Report.ReportStrings.resources”,而不包含“Report.resources”。