Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#资源处理_C#_Wpf_Resources - Fatal编程技术网

C#资源处理

C#资源处理,c#,wpf,resources,C#,Wpf,Resources,我使用file->New item>resource创建了一个资源文件,并放置了两个键和两个值。 如果我将其设置为嵌入式资源,则我可以执行并接收值: ResourceName.ResourceManager.GetString("Key"); 但当我在未嵌入资源的情况下执行此操作时,会出现异常 A first chance exception of type 'System.Resources.MissingManifestResourceException' occurred in msc

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

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并引发异常时

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

我在跟踪,但也没有工作。无法加载文件?

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

我也想有一个成员,我可以打电话和搜索的关键

这里有一种方法(假设您已经将名为“ResourceName.resx”的“资源文件”添加到项目中):

ResourceSet rs=ResourceName.ResourceManager.GetResourceSet(
Thread.CurrentThread.CurrentUICulture,true,true);
Dictionary resources=rs.Cast().ToDictionary(r=>(string)r.Key,r=>r.Value);
//现在可以列出所有键,例如:
foreach(resources.Keys中的字符串键)
{
Debug.WriteLine(键);
}
//…或可以确定是否存在密钥:
对象五;
if(resources.TryGetValue(“Key”,out v))
{
Debug.WriteLine(v);
}
将资源文件中的所有资源加载到
字典中,然后您可以使用该字典来发现密钥。不过,这可能不是非常有效,因为它会将整个资源集加载到内存中

如果您只需要密钥列表,可以执行以下操作:

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

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

为什么不能直接使用资源文件的静态属性。例如,您有一个名为“ErrorMessage”的键,并且您的资源文件名为“Messages”,您可以使用var error=Messages.ErrorMessage。您是如何添加它的?我的Visual Studio 2012副本在“文件”菜单下没有“新建项”。如果我在解决方案资源管理器中右键单击项目并选择Add->New Item,则资源有两个选项:“资源文件”和“资源字典(WPF)”,这两个选项都不是您所编写的。所以不完全清楚你做了什么。选择前一个(“资源文件”)是可行的,我没有得到错误。所以我需要更精确的描述来提供帮助。@iangriffith右键单击项目,添加项>资源文件。(“Visual C#Items”)@Danny您建议的方式很有效,但我也希望有一个成员可以打电话搜索密钥