我有一个带有很多ResourceDictionaries的.dll。
所有这些ResourceDictionaries的构建操作都设置为" Page" 。
在Dll中,我想找到所有这些ResourceDictionaries并迭代它们。
如果我将构建操作设置为" EmbeddedResource",我可以使用反射:
var embeddedResources = Assembly.GetExecutingAssembly().GetManifestResourceNames().ToList();
但GetManifestResourceNames()使用构建操作" Page"
执行 工作。如何查找或迭代所有具有构建操作的资源"页面"?
解决方案不一定是反思。任何其他方式都非常受欢迎。
谢谢!
解决方案:
女士们,先生们!我必须宣布,本周的男人和这个赏金的获胜者是Jon Wu先生。 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();
}
}
如果你调用这个方法,你得到的所有资源字符串都包含&#34; .baml&#34;最后你可以迭代它们。
感谢Jon Wu的正确提示。
答案 0 :(得分:2)
根据this answer,
页面(仅限WPF):用于将xaml文件编译为baml。然后使用与Resource相同的技术嵌入baml(即可用作
AppName.g.resources
)。
因此,您只需要查找使用YourAppName.g.resources
标识的资源。