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

如何效仿Windows Forms导入器将媒体文件嵌入编译程序并隐藏?

将图标嵌入程序集以隐藏外部资源的解决方案

步骤1:将图标设置为嵌入式资源

  • 在Visual Studio中,右键你的项目 → 「添加」→ 「现有项」,选中Assets/ico/16x.ico文件添加到项目中(若已在项目内可直接跳过此步)
  • 选中该图标文件,在右侧属性窗口中:
    • 将「生成操作」改为 嵌入式资源
    • 将「复制到输出目录」改为 不复制

步骤2:修改代码从程序集读取图标

无需再通过文件路径加载资源,直接从当前程序集的嵌入式资源中读取流来创建图标:

public void Init()
{
    try
    {
        // 替换为你的项目命名空间+资源路径(路径用点分隔,例:项目命名空间是MyApp,资源名就是MyApp.Assets.ico.16x.ico)
        string resourceName = "YourProjectNamespace.Assets.ico.16x.ico";
        using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
        {
            if (stream == null)
            {
                throw new FileNotFoundException("未找到嵌入式图标资源", resourceName);
            }
            SpawnTray(stream);
        }
    }
    catch (Exception ex)
    {
        MsgClass.Init(ex.Message, MessageBoxIcon.Error);
        System.Environment.Exit(1);
    }
}

private void SpawnTray(Stream iconStream)
{
    Icon_x = new NotifyIcon();
    Icon_x.Icon = new Icon(iconStream);
    Icon_x.Visible = true;
}

注意事项

  • 确认资源名称:资源名称格式为「项目命名空间.文件夹层级.文件名」,如果不确定具体名称,可以用以下代码列出所有嵌入式资源来核对:
    foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames())
    {
        Console.WriteLine(name);
    }
    
  • 这种方式和WinForms内置的资源导入逻辑完全一致,图标会被直接编译进最终的.exe文件,终端用户看不到单独的Assets文件夹和图标文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:15:10