C#资源处理

本文关键字:处理 资源 | 更新日期: 2023-09-27 18:01:04

我使用file->Newitem>resource创建了一个资源文件,并放置了2个键和2个值
如果我将其设置为嵌入式资源,那么我可以执行并接收值:

ResourceName.ResourceManager.GetString("Key");

但当我在并没有嵌入资源的情况下这样做时,我会遇到异常。

A first chance exception of type 
'System.Resources.MissingManifestResourceException' occurred in mscorlib.dll

如何创建用我创建的资源初始化自身的ResourceManager对象?

我试过了:

ResourceManager resourceManager = ResourceManager.CreateFileBasedResourceManager
(resourceFile, filePath, null);

当路径和文件名正常,但对象为null并引发异常时。

我正在从源中跟踪此读取值。。但也不起作用。文件无法加载?

C#资源处理

回答ilansch在原始问题的注释中添加的问题:

我也想有一个成员,我可以打电话和搜索密钥

这里有一种方法(假设您已经在项目中添加了一个名为"ResourceName.resx"的"资源文件"(:

ResourceSet rs = ResourceName.ResourceManager.GetResourceSet(
    Thread.CurrentThread.CurrentUICulture, true, true);
Dictionary<string, object> resources = rs.Cast<DictionaryEntry>().ToDictionary(r => (string) r.Key, r => r.Value);
// Can now list all keys, e.g.:
foreach (string key in resources.Keys)
{
    Debug.WriteLine(key);
}
// ...or can find out whether a key is present:
object v;
if (resources.TryGetValue("Key", out v))
{
    Debug.WriteLine(v);
}

这会将资源文件中的所有资源加载到Dictionary<string, object>中,然后您可以使用它来发现密钥。不过,这可能效率不高,因为它会将整个资源集加载到内存中。

如果你只想要一个密钥列表,你可以这样做:

string[] keys = rs.Cast<DictionaryEntry>().Select(r => (string) r.Key).ToArray();

不确定这是否真的有帮助,因为我不清楚你在这里的总体目标是什么。