如何使用GetManifestResourceStream()方法检索JPG图像?

时间:2014-04-11 11:07:52

标签: c# asp.net .net

我有以下情况:

我有解决方案,名为 MySolution ,在此解决方案中,有一些项目包括名为 PdfReport 的项目。在此项目中,有一个名为共享文件夹,在此文件夹中有一个 header.jpg 图片。

现在我正在尝试检索此文件,并且我在官方文档(http://msdn.microsoft.com/en-us/library/aa287676%28v=vs.71%29.aspx)上找到了此代码:

System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file = 
    thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
this.pictureBox1.Image = Image.FromStream(file);

在文档上说:

  

替换" AssemblyName.ImageFile.jpg"与资源的名称,作为   它在集会中是众所周知的。

我发现在我的特定情况下需要插入一些困难,作为GetManifestResourceStream()方法的输入参数。

你能帮我翻一下我的文件吗?

TNX

4 个答案:

答案 0 :(得分:0)

GetManifestResourceStream获取资源存储在程序集中的名称。编译器选择该名称。据我记得,名称是从程序集名称,命名空间名称和文件名拼凑而成的。

老实说,我总是要找到的名字是在Reflector或任何其他.NET反汇编程序中打开已编译的程序集,只需从那里复制资源名称。我承认这是一种原始技术,不是基于对技术的理解,但它可能对你有用。

答案 1 :(得分:0)

如果它是嵌入式资源,您可以使用名称MySolution.Properties.Resources.ImageFile.jpg获取它,否则使用如下所示的语句

this.pictureBox1.Image = Image.FromFile(Application.StartupPath + @"\shared\ImageFile.jpg");

答案 2 :(得分:0)

使用方法String [] fileNames = assembly.GetManifestResourceNames(); 它将返回包括命名空间在内的所有文件,只需使用以您的名字结尾的文件:

    public static Stream ExtractResourceFile(Assembly assembly, String fileName )
    {
        // get all embedded resource file names including namespace
        String[] fileNames = assembly.GetManifestResourceNames();

        String resourceName = null;
        String temp = "." + fileName.ToUpper();
        foreach (var item in fileNames)
            if (item.ToUpper().EndsWith(temp))
                resourceName = item;
        if (resourceName == null)
            throw new Exception("Embedded resource [" + fileName + "] not found");
        Tracer.Debug("Resource file name [{0}] found as [{1}]", fileName, resourceName);

        // get stream
        Stream stream = assembly.GetManifestResourceStream(resourceName);
            if (stream == null)
                throw new Exception("Embedded resource [" + resourceName + "] could not be opened.");
        return stream;
    }

答案 3 :(得分:0)

//第一步 1.您将成像仪添加到项目中。 2.右键单击图像,然后将Build Action更改为Embedded Resource。 Right click on the image and change Build Action to Embedded Resource.

在你的代码中: 取消注释下面的行并添加断点。它将返回一个列出了所有资源的数组。只需找到您的资源,并将“assembly.draft.png”替换为您的资源。

//  var d = thisExe.GetManifestResourceNames();
System.IO.Stream file =
 thisExe.GetManifestResourceStream(@"assembly.draft.png");
while ((read = file.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}