使用外部dll中的嵌入式资源,无需可视工作室

时间:2017-12-03 23:43:04

标签: c# winforms dll embedded-resource system.reflection

好的,所以我遇到了一个我无法找到解决方案的问题。使用视觉工作室属性有很多解决方案。问题是我没有使用可视工作室,我正在使用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();
        }
    }
}

当我运行此操作时,我收到一个消息框,显示'null'的值对'stream'无效

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

1 个答案:

答案 0 :(得分:0)

非常感谢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,可能会找到一个可以找到无需解决方案的解决方案。玩得开心编程:)