在没有视觉工作室的情况下使用外部 dll 中的嵌入式资源

Working with embedded resources in external dll, without visual studios

好的,所以我 运行 遇到了一个问题,但我找不到解决方案。有很多使用视觉工作室属性的解决方案。问题是我没有使用视觉工作室,我正在使用 csc.exe 来编译我的代码。

这是我目前所拥有的。


exe.cmd

dll.cmd

Resource.dll

Main.csx

Rsc.csx

a.png


这是 .cmd 文件和 .csx 文件的所有代码

exe.cmd

@echo off
csc.exe /target:winexe /reference:Resource.dll /out:Main.exe Main.csx
pause

dll.cmd

@echo off
csc.exe /target:library /resource:a.png /out:Resource.dll Rsc.csx
pause

Rsc.csx

using System;
using System.IO;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;

namespace EmIm
{
    public static class Bck
    {
        public static Image GetBck()
        {
            Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("a.png"));
            Image rtn = bmp;
            return rtn;
        }
    }
}

Main.csx

using System;
using System.IO;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;

using EmIm;

namespace prg
{
    class class_m
    {
        public static void Main()
        {
            Form f1 = new Form();
            try
            {
                f1.BackgroundImage = Bck.GetBck();
            }
            catch(Exception e)
            {
                MessageBox.Show(e.Message);
            }
            f1.ShowDialog();
        }
    }
}

当我 运行 这样做时,我得到一个消息框,显示 value of 'null' is not valid for 'stream'

我需要采取哪些步骤才能通过反射访问 a.png,我已检查以确保 a.png 是程序集中的正确名称。任何帮助将不胜感激。谢谢:)

非常感谢 Hans Passant 为这个问题提供了简单的解决方案。我什至不知道去哪里寻找如何回答这个问题,但他在一条评论中总结了它。

为了使程序运行,只需更改一个文件

新建Rsc.csx文件

using System;
using System.IO;
using System.Drawing;
using System.Reflection;
using System.Windows.Forms;
using System.Runtime.CompilerServices;

namespace EmIm
{
    public static class Bck
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static Image GetBck()
        {
            Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("a.png"));
            Image rtn = bmp;
            return rtn;
        }
    }
}

再次感谢 Hans Passant 快速解决了我的问题,希望任何其他顽固地避免使用 Visual Studios 的程序员都可以参考这个来找到一个没有它也能工作的解决方案。祝您编程愉快:)