使用代码如何将附属程序集嵌入到csharptest.net 提供的 EXE 文件中,我创建了一个自定义程序集解析器并将我的程序集嵌入到我的资源中。
我可以成功解决我使用的程序集,但不知何故 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;
}