好的,所以我遇到了一个我无法找到解决方案的问题。使用视觉工作室属性有很多解决方案。问题是我没有使用可视工作室,我正在使用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是程序集中的正确名称。任何帮助将不胜感激。谢谢:))
答案 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,可能会找到一个可以找到无需解决方案的解决方案。玩得开心编程:)