2

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

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

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

在 VS2008 中,您可以在 .resx 文件的设置中覆盖(默认)逻辑名称,Managed Resources/General/Resource Logical Name。在 VS2010 中我无法让它工作——它完全忽略了这个设置!有没有其他方法可以解决这个问题?

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

有什么建议么?

4

1 回答 1

3

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

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

为了解决这个问题,我在项目级别(或者您可以使用项目属性页)将“资源逻辑名称”定义为 $(RootNamespace).%(Filename).resources。请注意,.resource 文件仍然获得扩展名称(由它们所在的文件夹定义)。但是,如果您从 MSBuild 检查日志文件,您会看到逻辑名称出现在链接器的 /ASSEMBLYRESOURCE 开关中,除了资源文件名!重建后,ComponentResourceManager 现在将使用视图类型(在本例中为 Rootnamespace.filename)在“InitializeComponent”中查找资源。另请注意,这假设您的视图类放置在与该类同名的文件中!

于 2012-09-13T10:55:24.207 回答