C#单文件应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    }
}

 

完。

以上是关于C#单文件应用的主要内容,如果未能解决你的问题,请参考以下文章

记录C#常用的代码片段

C#程序员经常用到的10个实用代码片段 - 操作系统

如何为 XSLT 代码片段配置 CruiseControl 的 C# 版本?

Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A

使用循环片段依赖关系模块化单活动Android应用程序

C# 最有用的(自定义)代码片段是啥? [关闭]