我有以下情况:
我有解决方案,名为 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
答案 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);
}