我有一个名为“Test.exe”的嵌入式资源。我想做以下事情:
我正在使用以下代码(在此站点上找到) - 但问题是“s”始终返回空值。我使用以下代码如下:byte[] b = ReadResource("Test.exe");
public static byte[] ReadResource(string resourceName)
{
using (Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] buffer = new byte[1024];
using (MemoryStream ms = new MemoryStream())
{
while (true)
{
int read = s.Read(buffer, 0, buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer, 0, read);
}
}
}
}
希望有人能找到我遇到的问题。
答案 0 :(得分:2)
您需要指定资源的全名。例如,如果您的应用程序被称为Foo
:
byte[] b = ReadResource("Foo.Test.exe");
实际上,最简单的方法是使用Reflector打开程序集并查看嵌入资源的确切名称。应用程序名称和资源名称之间可能存在名称空间。
如果您没有Reflector(是的,它成为付费产品),要查找嵌入资源的名称,您可以使用以下代码:
foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}
获得嵌入资源的确切名称后,将其传递给ReadResource
方法。
作为另一种选择,您可以使用ildasm.exe并双击MANIFEST
,它会显示所有嵌入资源。
答案 1 :(得分:2)
如果使用'typed'资源,您可以使用一行代码执行此操作。
File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
添加输入资源:
Resources
标签File
作为资源类型将您的可执行文件添加到资源
现在您可以按Resources.TestFile