如何在Visual Studio 2010中设置资源逻辑名称?

时间:2012-09-12 13:37:12

标签: visual-studio-2010

将解决方案从VS2008迁移到VS2010时遇到问题。问题是在某些情况下在运行时找不到托管资源,因为它们没有嵌入正确的名称:

“无法找到适合指定文化或中性文化的任何资源。确保”Production.ViewDocument.resources“在编译时正确嵌入或链接到程序集”RSProcess“,或者所需的所有附属程序集都是可加载和完全签名。“

System.Resources.MissingManifestResourceException通常在对通过类型id创建的资源的ApplyResources调用中抛出InitializeComponent。在我的例子中,命名空间是Production,类名是ViewDocument。但是,生成的资源(来自ViewDocument.resx)是从resx文件所在的文件夹结构中命名的,在本例中为Production.folder1.folder2.ViewDocument.resources。

在VS2008中,您可以在.resx文件,托管资源/常规/资源逻辑名称的设置中覆盖(默认)逻辑名称。在VS2010中,我无法使用它 - 它完全忽略了这个设置!有没有办法解决这个问题?

最后一种方法是删除当前文件夹结构并将所有文件移动到根项目文件夹,但在我的情况下这似乎是相当多的工作。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我找到了自己问题的答案!

VS2010中的一些事情发生了变化让我感到困惑。首先,在VS2008中,.resource文件的名称受项目设置“资源逻辑名称”的影响,在VS2010中,文件总是根据项目的根命名空间和文件夹结构(扩展名称空间)命名。其次,在迁移时,这些设置被消除了,可能是因为我们使用了已被%(文件名)替换的宏$(InputFile)。

要解决此问题,我在项目级别(或者您可以使用项目属性页面)将$ Resource Logical Name定义为$(RootNamespace)。%(Filename).resources。请注意,.resource文件仍然可以获得扩展名(由它们驻留在哪个文件夹中定义)。但是,如果从MSBuild检查日志文件,除了资源文件名之外,您还可以看到逻辑名称出现在链接器的/ ASSEMBLYRESOURCE swich中!重建之后,ComponentResourceManager现在将使用视图的类型(在这种情况下为Rootnamespace.filename)在“InitializeComponent”中查找资源。另请注意,这假定您的视图类放在与类同名的文件中!