13

我正在尝试使用以下方法在我的 .net 网站中加载 resx 文件:

ResourceManager rm = new ResourceManager( "Project.Resource", Assembly.GetExecutingAssembly() );

Resource.resx 文件位于文件夹 App_LocalResources 中,并设置为在构建时嵌入到程序集中。

当我尝试使用以下方式访问 resx 文件时:

rm.GetString( "key" );或者rm.GetString( "key", culture );

我收到一条错误消息:

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

注意 .resources ...关于这里发生了什么的任何想法?

4

5 回答 5

20

要将 .resx 加载到 ResourceManager 中,您需要指定命名空间

var rm = new ResourceManager("Namespace.ResxName", Assembly.GetAssembly());

或者,如果将托管资源编辑器中的访问修饰符设置为内部或公共,则可以免费获得 ResourceManager,之后 VS 将生成 ResxName.Designer.cs

var rm = ResxName.ResourceManager;
于 2012-10-23T13:02:32.807 回答
5

通过字符串读取资源的方法非常简单:

ResourceNamespace.ResxFileName.ResourceManager.GetString("ResourceKey")

在不能使用“点表示法”的情况下(例如,当资源密钥保存在数据库中时),它是一种简洁而优雅的解决方案,用于通过键读取资源。

于 2015-04-22T08:43:34.450 回答
3

我认为您使用 ResourceManager 的方式是错误的。看到这个帖子

另请注意,当您打开 Visual Studio 命令提示符并运行 resgen.exe 时,它​​表示它用于将资源文件从一种格式转换为另一种格式(即 resx 到资源)。我认为,您需要将文件从 resx 转换为资源,然后使用 resourceManager 加载它。

于 2009-09-22T16:34:45.513 回答
3

我不确定您使用的是哪个版本的 .NET Framework。

尝试改变让 ResourceManager 栩栩如生的方式。

ResourceManager rm = 
     new ResourceManager("Project.Resource", 
                         System.Reflection.Assembly.Load("App_LocalResources"));

它应该工作。

这也作为具体资源管理器的自动生成的 .designer.cs 类的静态属性公开。

于 2009-10-12T13:42:19.133 回答
0

显式添加 .resx 扩展名。

如果适合您的项目,您还可以使用自动生成的类并使用其属性。

于 2009-09-22T16:02:40.483 回答