Ale*_*x_P 12 .net wpf resources
我有一个资源程序集,其中包含使用资源或内容构建操作构建的映像文件.这使得可以使用Uris访问这些文件.但是我找不到枚举这些资源的方法.
如果我将构建操作设置为嵌入式资源,则可以使用以下代码枚举文件:
string[] resources = Assembly.GetExecutingAssembly().GetManifestResourceNames();
但它反过来使用Uris使这些文件无法访问.
问题是 - 如何枚举使用资源或内容构建操作编译的资源?
注意:正如Thomas Levesque所指出的,可以通过利用AssemblyAssociatedContentFileAttribute来枚举这些资源,但它似乎只适用于WPF应用程序集,而不适用于类库.所以问题仍然存在.
Tho*_*que 28
您可以枚举AssemblyAssociatedContentFile在程序集上定义的属性:
var resourceUris = Assembly.GetEntryAssembly()
                   .GetCustomAttributes(typeof(AssemblyAssociatedContentFileAttribute), true)
                   .Cast<AssemblyAssociatedContentFileAttribute>()
                   .Select(attr => new Uri(attr.RelativeContentFilePath));
您还可以查看此页面以获取枚举BAML资源的方法.
更新:实际上上面的解决方案仅适用于内容文件.下面的方法返回所有资源名称(包括BAML资源,图像等):
    public static string[] GetResourceNames()
    {
        var asm = Assembly.GetEntryAssembly();
        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();
        }
    }
| 归档时间: | 
 | 
| 查看次数: | 8065 次 | 
| 最近记录: |