将嵌入式资源读入字节数组(C#)时出错

将嵌入式资源读入字节数组(C#)时出错,c#,.net,arrays,resources,embedded-resource,C#,.net,Arrays,Resources,Embedded Resource,我有一个名为“Test.exe”的嵌入式资源。我想做以下工作: 将Test.exe的内容读入字节数组 将Test.exe(现在是字节数组)的内容写入新位置(C:\Test.exe) 我正在使用下面的代码(在这个网站上找到)——但问题是“s”总是返回空值。我使用的代码如下:byte[]b=ReadResource(“Test.exe”) 公共静态字节[]ReadResource(字符串resourceName) { 使用(流s=Assembly.GetExecutionGassembly().Ge

我有一个名为“Test.exe”的嵌入式资源。我想做以下工作:

  • 将Test.exe的内容读入字节数组
  • 将Test.exe(现在是字节数组)的内容写入新位置(C:\Test.exe)
  • 我正在使用下面的代码(在这个网站上找到)——但问题是“s”总是返回空值。我使用的代码如下:
    byte[]b=ReadResource(“Test.exe”)

    公共静态字节[]ReadResource(字符串resourceName)
    {
    使用(流s=Assembly.GetExecutionGassembly().GetManifestResourceStream(resourceName))
    {
    字节[]缓冲区=新字节[1024];
    使用(MemoryStream ms=new MemoryStream())
    {
    while(true)
    {
    int read=s.read(buffer,0,buffer.Length);
    
    if(read您需要指定资源的全名。例如,如果您的应用程序名为
    Foo

    byte[] b = ReadResource("Foo.Test.exe");
    
    实际上,最简单的方法是使用Reflector打开程序集并查看嵌入资源的确切名称。在应用程序名称和资源名称之间可能有一个命名空间

    如果您没有Reflector(是的,它变成了付费产品),要找到嵌入式资源的名称,您可以使用以下代码:

    foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
    {
        Console.WriteLine(res);
    }
    
    获得嵌入资源的确切名称后,将其传递给
    ReadResource
    方法


    作为另一种选择,您可以使用并双击将显示所有嵌入资源的
    清单。

    您需要指定资源的全名。例如,如果您的应用程序被称为
    Foo

    byte[] b = ReadResource("Foo.Test.exe");
    
    File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
    
    实际上,最简单的方法是使用Reflector打开程序集并查看嵌入资源的确切名称。在应用程序名称和资源名称之间可能有一个命名空间

    如果您没有Reflector(是的,它变成了付费产品),要找到嵌入式资源的名称,您可以使用以下代码:

    foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
    {
        Console.WriteLine(res);
    }
    
    获得嵌入资源的确切名称后,将其传递给
    ReadResource
    方法


    作为另一种选择,您可以使用并双击
    清单
    ,该清单将显示所有嵌入的资源。

    如果使用“键入的”资源,您可以使用一行代码来完成此操作

    File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
    
    要添加类型化资源,请执行以下操作:

    • 转到项目属性
      资源
      选项卡
    • 选择
      文件
      作为资源类型
    • 将可执行文件添加到资源中

    • 现在,您可以通过
      Resources.TestFile


    如果使用“类型化”资源,则只需一行代码即可完成此操作

    File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
    
    要添加类型化资源,请执行以下操作:

    • 转到项目属性
      资源
      选项卡
    • 选择
      文件
      作为资源类型
    • 将可执行文件添加到资源中

    • 现在,您可以通过
      Resources.TestFile


    什么是reflector?那是第三方应用程序吗?你可以使用ILSpy作为reflector的免费替代品。什么是reflector?那是第三方应用程序吗?你可以使用ILSpy作为reflector的免费替代品。这是一个很好的回答。谢谢你-只是出于好奇,如果这是一个不太容易?@Evan-嗯…让生活变得更困难我猜:)@Evan-那么你选择了艰难的方式?:)不太容易,但他确实回答了我的问题:)对不起,我帮不上忙:(.这是一个很好的回答。谢谢你-只是出于好奇,如果这个方法这么简单的话,为什么会有人用其他方法添加一个可执行文件作为资源?@Evan-hmmm…让生活更困难我猜:)@Evan-那么你选择了艰难的方式不太清楚,但他确实回答了我的问题:)对不起,我帮不了忙:(。