我有一个问题,需要将一个C#项目作为单个EXE文件分发,这不是安装程序而是真正的程序。它还需要包含一项翻译,目前位于子目录中。
是否可以直接将其嵌入到二进制文件中?
我有一个问题,需要将一个C#项目作为单个EXE文件分发,这不是安装程序而是真正的程序。它还需要包含一项翻译,目前位于子目录中。
是否可以直接将其嵌入到二进制文件中?
另一种选择是将其他程序集作为EmbededResource嵌入。然后处理应用程序域的AssemblyResolve事件,在此处您可以从资源中读取程序集并将其加载到运行时中。类似以下内容:
public class HookResolver
{
Dictionary<string, Assembly> _loaded;
public HookResolver()
{
_loaded = new Dictionary<string, Assembly>(StringComparer.OrdinalIgnoreCase);
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string name = args.Name.Split(',')[0];
Assembly asm;
lock (_loaded)
{
if (!_loaded.TryGetValue(name, out asm))
{
using (Stream io = this.GetType().Assembly.GetManifestResourceStream(name))
{
byte[] bytes = new BinaryReader(io).ReadBytes((int)io.Length);
asm = Assembly.Load(bytes);
_loaded.Add(name, asm);
}
}
}
return asm;
}
}