我们目前正在评估VS2010,并已将我们的VS2008 C ++ / CLI项目升级为新的.vcxproj格式。我注意到我们在项目设置中设置的某个属性没有正确翻译。在配置属性下 - >托管资源 - >资源逻辑名称,我们曾经(在VS2008中)设置:
$(IntDir)\$(RootNamespace).$(InputName).resources
表示所有.resx文件都要编译成
OurLib.SomeForm.resources
装配体内部。 (组装时调试部分被删除)
根据MSDN,$(InputName)宏不再存在,应替换为%(Filename)。但是,在翻译上述行以交换这些宏时,它似乎永远不会扩展。它尝试编译的第二个.resx文件,我得到一个“LINK:致命错误LNK1316:重复的托管资源名称'Debug \ OurLib。%(Filename).resources”。这向我表明,%style宏未在此处展开,至少在此特定属性中是这样。
如果我们没有在该属性中设置任何内容,则默认行为似乎是将子目录添加为前缀,例如:
OurLib.Forms.SomeForm.resources
其中Forms是.resx文件所在项目的子目录。仅当.resx文件位于正在构建的项目的直接子目录中时,才会发生这种情况。如果.resx文件存在于磁盘上的其他位置(也就是.. \ OtherLib \ Forms \ SomeForm2.resx),则不会添加此前缀。
这导致加载表单资源时出现问题,因为它没有考虑这个可能的前缀,即使我们使用标准的Forms Designer方法来获取资源:
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(SomeForm::typeid));
并且不要按名称指定.resources文件。
我刚才描述的问题可能与原始问题不一样,但如果我要修复资源逻辑名称问题,我认为这一切都会消失。有没有人有关于这些%宏的信息以及允许使用它们的位置?