Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# ResourceSet未加载子文件夹的子文件夹中的项目_C#_Wpf_Resources - Fatal编程技术网

C# ResourceSet未加载子文件夹的子文件夹中的项目

C# ResourceSet未加载子文件夹的子文件夹中的项目,c#,wpf,resources,C#,Wpf,Resources,我使用典型代码加载程序集并检索其资源。它查找顶级子文件夹中的所有资源(例如,“组件/图像”),但如果我将图像等资源放入这些子文件夹(例如组件/图像/菜单)中然后这些资源都不会出现在集合中。我检查了application.g.resources文件,它们就在那里。我尝试了两种扫描资源的方法: System.Globalization.CultureInfo culture = Thread.CurrentThread.CurrentCulture; string resourceName = as

我使用典型代码加载程序集并检索其资源。它查找顶级子文件夹中的所有资源(例如,“组件/图像”),但如果我将图像等资源放入这些子文件夹(例如组件/图像/菜单)中然后这些资源都不会出现在集合中。我检查了application.g.resources文件,它们就在那里。我尝试了两种扫描资源的方法:

System.Globalization.CultureInfo culture = Thread.CurrentThread.CurrentCulture;
string resourceName = asm.GetName().Name + ".g";
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(resourceName, asm);
System.Resources.ResourceSet resourceSet = rm.GetResourceSet(culture, true, true);
List<string> resources = new List<string>();
foreach (DictionaryEntry resource in resourceSet)
    resources.Add((string)resource.Key);
rm.ReleaseAllResources();
return resources;

这两种方法都会产生相同的结果,但都不包括子文件夹子文件夹中的任何资源。有人知道如何获取这些资源的列表吗?它们在使用pack:uri引用时工作正常。

可能您的资源在生成时未复制到bin目录?请检查生成操作并正确复制到输出目录这些文件的关系。

我无法重现此问题,使用您的代码,我可以为任何级别的子文件夹获取资源,我甚至尝试了6,但它仍然有效,因此其他问题一定是您的问题。当我测试此功能时,我注意到有时必须重新生成程序集才能显示资源,而且资源构建操作也是im重要性,例如,将图像资源生成操作设置为“资源”,使其在被跳过时显示,但没有,内容等。我已重新生成。我尝试过的任何操作都不适用于我。有问题的程序集没有什么不寻常的地方。哦,反射器似乎在查找它们时没有问题。您尝试过使用较小的示例应用程序吗n和assembly,在这种情况下,问题仍然存在吗?我是否应该上传我的示例应用程序,以便您可以尝试它,看看它是否适用于您的终端?是的,也尝试了一些小东西。您认为您需要SatelliteContractVersionAttribute吗?不,这绝对不是问题所在。
foreach (string name in assembly.GetManifestResourceNames())
{
    using (Stream stream = assembly.GetManifestResourceStream(name))
    {
            using (IResourceReader reader = new ResourceReader(stream))
            {
                foreach (DictionaryEntry entry in reader)
                {
                     // Add resource here
                }
            }
        }
    }
}