使用代码如何将附属程序集嵌入到 EXE 文件中 https://stackoverflow.com/questions/1453755/how-to-embed-a-satellite-assembly-into-the-exe-file/1454496#1454496由 csharptest.net 提供,我创建了一个自定义程序集解析器并将我的程序集嵌入到我的资源中。
我可以成功解析我使用的程序集,但不知何故 AppDomain.CurrentDomain.AssemblyResolve 要求一个名为“AppName.resources”的程序集,特别是“MyProgram.resources,Version = 0.15.3992.31638,Culture = en-US,PublicKeyToken = null”,我不这样做不知道如何解决?
我尝试禁用从资源加载自定义程序集(将所有程序集 dll 放在程序目录中)并仅启用 AppDomain.CurrentDomain.AssemblyResolve,但它仍然要求这样做。
我对此有点困惑,如果您能在这方面帮助我,我将不胜感激。
这是我的代码,供感兴趣的人使用;
static Assembly ResolveAssemblies(object sender, ResolveEventArgs args)
{
Assembly assembly = null;
string name = args.Name.Substring(0, args.Name.IndexOf(','));
if (name == "MyProgram.resources") return null;
else name = string.Format("MyProgram.Resources.Assemblies.{0}.dll", name);
lock (_loadedAssemblies)
{
if (!_loadedAssemblies.TryGetValue(name, out assembly))
{
using (Stream io = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
{
if (io == null)
{
MessageBox.Show("MyProgram can not load one of it's dependencies. Please re-install the program", string.Format("Missing Assembly: {0}", name), MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
using (BinaryReader binaryReader = new BinaryReader(io))
{
assembly = Assembly.Load(binaryReader.ReadBytes((int)io.Length));
_loadedAssemblies.Add(name, assembly);
}
}
}
}
return assembly;
}