如何解决将嵌入式资源读入字节数组C#时出错
| 我有一个名为\“ Test.exe \”的嵌入式资源。我要执行以下操作: 将Test.exe的内容读入字节数组。 将Test.exe的内容(现在位于字节数组中)写入新位置(C:\\ 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,buffer.Length);
if (read <= 0)
return ms.ToArray();
ms.Write(buffer,read);
}
}
}
}
希望有人能找到我遇到的麻烦。
解决方法
您需要指定资源的全名。因此,例如,如果您的应用程序名为
Foo
:
byte[] b = ReadResource(\"Foo.Test.exe\");
实际上,最简单的方法是使用Reflector打开程序集,然后查看嵌入式资源的确切名称。在应用程序名称和资源名称之间可能存在一个名称空间。
而且,如果您没有Reflector(是的,它已经成为付费产品),要查找嵌入式资源的名称,可以使用以下代码:
foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}
获得嵌入资源的确切名称后,将其传递给ReadResource
方法。
作为另一种选择,您可以使用ildasm.exe并双击ѭ6,这将向您显示所有嵌入式资源。
, 如果使用\'typed \'资源,则只需一行代码即可完成。
File.WriteAllBytes(\"C:\\\\test1.exe\",Resources.TestFile);
要添加键入的资源:
转到项目属性Resources
选项卡
选择“ 9”作为资源类型
将可执行文件添加到资源中
现在您可以按ѭ10引用文件内容
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。