• C#单文件应用


    网上有许多关于单文件打包的帖子,虽能拓展思路,质量却是一般。

     

    这里只讲最简单的一种。

     

    首先,将dll添加到项目中,并将它们的“生成操作”改为“嵌入的资源”。

     

    其次,参考《CLR Via C#》给出的解决方案,添加几行代码,如下:

     

    1. 先添加一个程序集加载失败的事件。

    // 添加程序集解析事件
    AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => LoadFromResource(args.Name);

     

    2. 根据文件名加载程序集(dll)。

    /// <summary>
    /// 根据要加载的资源项名,加载对应的程序集。
    /// </summary>
    /// <param name="argsName">要解析的项的名称。</param>
    /// <returns>返回对应项的程序集。</returns>
    private Assembly LoadFromResource(string argsName)
    {
        string dllName = new AssemblyName(argsName).Name + ".dll";
    
        var assem = Assembly.GetExecutingAssembly();
        var resourceName = assem.GetManifestResourceNames().FirstOrDefault(rn => rn.EndsWith(dllName));
        if (resourceName == null) return null; // 没找到程序集。
    
        using (Stream stream = assem.GetManifestResourceStream(resourceName))
        {
            byte[] assemblyData = new byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }
    }

    完。

  • 相关阅读:
    Unity3d资源管理分析
    Unity3D之MonoBehaviour的可重写函数整理
    Unity3D脚本学习——运行时类
    A*寻路初探(转载)
    360sdk网游支付服务
    总结使用Unity 3D优化游戏运行性能的经验
    Unity3D之Lightmap详解
    「luogu2714」四元组统计
    「BZOJ1066」[SCOI2007]蜥蜴
    「luogu1251」餐巾计划问题
  • 原文地址:https://www.cnblogs.com/yyzj/p/6604519.html
Copyright © 2020-2023  润新知