我有一个带有大量ResourceDictionaries的.dll。WPF C#思考:使用构建操作遍历所有资源“页面”
构建动作所有这些ResourceDictionaries被设置为“Page”。
在Dll中,我想找到所有这些ResourceDictionaries并遍历它们。
如果我设置构建行动“EmbeddedResource”,我可以使用反射:
var embeddedResources = Assembly.GetExecutingAssembly().GetManifestResourceNames().ToList();
但GetManifestResourceNames()则用于生成操作“页面的”资源不工作。
如何找到或迭代所有具有构建操作“页面”的资源?
该解决方案不一定是反射。任何其他方式都非常受欢迎。
谢谢!
解决方案:
女士们先生们!我必须宣布,本周的人和这个奖金的获得者是Jon Wu先生。乔恩·吴给出正确的提示,并通过搜索,我发现这个解决方案:
Enumerating .NET assembly resources at runtime
工作代码,稍微改变了这个样子的:
public static string[] GetResourceNames()
{
var asm = Assembly.GetExecutingAssembly();
string resName = asm.GetName().Name + ".g.resources";
using (var stream = asm.GetManifestResourceStream(resName))
using (var reader = new System.Resources.ResourceReader(stream))
{
return reader.Cast<DictionaryEntry>().Select(entry => (string)entry.Key).ToArray();
}
}
如果调用此方法,你会得到一切最后有一个“.baml”的资源字符串,您可以遍历它们。
谢谢Jon Wu的正确提示。
这是你的答案吗? https://stackoverflow.com/questions/3314140/how-to-read-embedded-resource-text-file –
@JohnPeters:没有。正如我在问题中明确写的,GetManifestResourceNames()只适用于“EmbeddedResource”。它不适用于“页面”。 – Michael
所有“页面”标记的项目都将放入一个包含每个字典一个流的 .g.resources' .NET嵌入式资源。这些字典采用BAML格式(https://en.wikipedia.org/wiki/Extensible_Application_Markup_Language#Technology),所以我不确定这是否有用。一旦你列举了这些BAML流,你想要做什么? –