usando el código How to embed a satellite assembly into the EXE file provisto por csharptest.net, he creado un solucionador de conjuntos personalizado e incrustó mis ensamblajes en mis recursos.AppDomain.CurrentDomain.AssemblyResolve solicitando un ensamblado de <AppName> .resources?
Puedo resolver con éxito mis ensamblados utilizados en pero de alguna manera AppDomain.CurrentDomain.AssemblyResolve solicita un ensamblado llamado 'AppName.resources' específicamente "MyProgram.resources, Version = 0.15.3992.31638, Culture = en-US, PublicKeyToken = null "que no sé cómo resolver?
He intentado deshabilitar la carga de mis ensamblajes personalizados desde los recursos (coloqué todos los dll de mi ensamblado en el directorio de programas) y acabo de habilitar AppDomain.CurrentDomain.AssemblyResolve, pero aún estaba pidiéndolo.
Estoy un poco confundido acerca de esto, apreciaré mucho si me pueden ayudar en esto.
Aquí está mi código para los interesados;
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;
}
+1 muchas gracias, muy útil! – smirkingman
Leí en alguna parte que devolver nulo no ayudará en este caso; puedes confirmar ? –
"El mejor enfoque funcionó para mí". Me hizo sacudir mi cabeza eso por un momento. Google y directamente a una respuesta SO. Me gusta. –