You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SharpDevelop资源管理与访问问题求助

我之前在SharpDevelop里折腾过好一阵子资源访问的问题,太懂这种VS和SD语法不兼容的头疼了!给你整理了亲测有效的解决方案和代码示例,分两种情况说:

1. 访问WinForms项目内嵌RESX中的资源

SharpDevelop不会像VS那样自动生成Properties.Resources静态类,所以得手动用ResourceManager来读取资源,步骤如下:

  • 先确认RESX文件的设置
    选中你的RESX文件(比如Resources.resx)右键→属性,把生成操作改成嵌入的资源,自定义工具留空(别选VS专属的ResXFileCodeGenerator)。

  • 代码示例:读取不同类型资源
    假设你的项目命名空间是MyWinFormsApp,RESX在项目根目录:

    using System.Resources;
    using System.Reflection;
    using System.Drawing;
    using System.Media;
    
    // 初始化资源管理器,参数格式为「命名空间.RESX文件名」
    var resManager = new ResourceManager("MyWinFormsApp.Resources", Assembly.GetExecutingAssembly());
    
    // 将内嵌图片设置到PictureBox(替换为你的资源名)
    var sampleImg = (Bitmap)resManager.GetObject("SampleIMG");
    pictureBox1.Image = sampleImg;
    
    // 播放内嵌音效
    var soundStream = (UnmanagedMemoryStream)resManager.GetStream("BackgroundSound");
    var soundPlayer = new SoundPlayer(soundStream);
    soundPlayer.Play();
    
    // 获取自定义字符串资源
    var customText = resManager.GetString("CustomText");
    

    如果RESX放在子文件夹(比如Resources文件夹),资源名称要改成MyWinFormsApp.Resources.Resources(命名空间+文件夹名+RESX文件名)。

2. 访问独立DLL中的图片/音频资源

首先得确保DLL里的资源文件(或RESX)的生成操作也是嵌入的资源,然后通过DLL的程序集来获取资源:

  • 用RESX管理的DLL资源:播放背景音效
    假设DLL命名空间是MyResourceDLL,RESX文件是DLLResources.resx,放在Resources文件夹下:

    using System.Resources;
    using System.Reflection;
    using System.Media;
    
    // 获取DLL的程序集(如果已引用DLL,也可以用typeof(MyResourceDLL.任意类).Assembly)
    Assembly dllAssembly = Assembly.Load("MyResourceDLL");
    
    // 初始化DLL的资源管理器
    var dllResManager = new ResourceManager("MyResourceDLL.Resources.DLLResources", dllAssembly);
    
    // 循环播放背景音效
    var musicStream = (UnmanagedMemoryStream)dllResManager.GetStream("BackgroundMusic");
    SoundPlayer musicPlayer = new SoundPlayer(musicStream);
    musicPlayer.PlayLooping();
    
  • 直接嵌入的DLL资源(无需RESX):读取图片
    要是DLL里直接把Images/SamplePic.png设为嵌入资源,不用RESX,可以直接读取流:

    using System.Reflection;
    using System.Drawing;
    
    Assembly dllAssembly = Assembly.Load("MyResourceDLL");
    // 资源名称格式:命名空间.文件夹名.文件名(路径分隔符替换为点)
    Stream imgStream = dllAssembly.GetManifestResourceStream("MyResourceDLL.Images.SamplePic.png");
    Bitmap dllImg = new Bitmap(imgStream);
    pictureBox1.Image = dllImg;
    

你可以根据自己的项目命名空间、资源路径调整代码,我在SharpDevelop 5.0里亲测这些代码都能正常运行。

内容的提问来源于stack exchange,提问作者AndrewSDT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:29:08