с использованием кода Как встроить спутниковую сборку в EXE-файл , предоставленный 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;
}