将程序集资源数据保存到文件

时间:2014-10-16 05:30:31

标签: c# asp.net reflection

我有一个生成一些WebPages的c#程序。在我的项目中,我通过ResourceManager将一些JavaScript文件添加到项目中。

现在我想获取所有ResourceNames并将它们保存到我的目标路径。

我知道这个问题在这里被问了一百万次,但我无法让它发挥作用。

这里我尝试列出我的所有资源

foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
    ....
}

但是我没有在res中获得资源名称 "WindowsFormsApplication3.Form1.resources"第一次在循环中 并且"WindowsFormsApplication3.Properties.Resources.resources"第二次 并且"WindowsFormsApplication3.Properties.Resources.Designer.cs"第三次

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您只是获取清单资源的名称,这与资源文件(resx)资源不同。

要从清单资源文件名中获取资源文件资源,例如"WindowsFormsApplication3.Properties.Resources.resources",您必须这样做:

foreach (var manifestResourceName in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(manifestResourceName))
    {
        if (stream != null)
        {
            using (var rr = new ResourceReader(stream))
            {
                foreach (DictionaryEntry resource in rr)
                {
                    var name = resource.Key.ToString();

                    string resourceType;
                    byte[] dataBytes;

                    rr.GetResourceData(name, out resourceType, out dataBytes);
                }
            }
        }
    }
}

然后您可以将字节保存在任何地方。