使用由csharptest.net提供的代码如何将卫星程序集嵌入exe文件,我创建了一个自定义程序集解析器并将我的程序集嵌入到资源中。
我可以成功解析在其中使用的程序集,但是 AppDomain.CurrentDomain.AssemblyResolve 会请求特定为“AppName.resources”且版本号为“0.15.3992.31638”,区域为“en-US”,公钥标记为“null”的程序集“MyProgram.resources”,我不知道如何解决它。
我尝试禁用从资源中加载我的自定义程序集(将所有程序集dll放置在程序目录中),只启用 AppDomain.CurrentDomain.AssemblyResolve,但仍然要求该程序集。
我对此有点困惑,如果您能帮助我,我将非常感激。
这是我感兴趣的人的代码;
我可以成功解析在其中使用的程序集,但是 AppDomain.CurrentDomain.AssemblyResolve 会请求特定为“AppName.resources”且版本号为“0.15.3992.31638”,区域为“en-US”,公钥标记为“null”的程序集“MyProgram.resources”,我不知道如何解决它。
我尝试禁用从资源中加载我的自定义程序集(将所有程序集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;
}