2012-09-12 50 views
2

将解决方案从VS2008迁移到VS2010时遇到问题。问题是,在某些情况下在运行时找不到管理的资源,因为它们未嵌入正确的名称:如何在Visual Studio 2010中设置资源逻辑名称?

“找不到适用于指定文化或中性文化的任何资源。确保”生产.ViewDocument.resources“在编译时被正确嵌入或链接到程序集”RSProcess“中,或者所有需要的附属程序集均可加载并完全签名。”

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

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

最后一个办法是删除当前的文件夹结构并将所有文件移动到根项目文件夹,但是这对我来说似乎是相当多的工作。

有什么建议吗?

回答

2

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

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

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

相关问题