После нахождения ответа мой последний вопрос по разрешению сборки ( AppDomain.CurrentDomain.AssemblyResolve запрашивает сборку .resources? ), теперь я могу вставлять сборки ссылок в мою программу, за исключением того, чтоэто не работает, некоторые ссылки как-то.
Прежде всего, я установил свой распознаватель сборок при самом первом входе в мою программу .cs
// attach our embedded assembly loader.
AppDomain.CurrentDomain.AssemblyResolve += AssemblyManager.Instance.Resolver;
Вот мой фактический распознаватель;
public Assembly Resolver(object sender, ResolveEventArgs args)
{
AssemblyName askedAssembly = new AssemblyName(args.Name);
lock (this)
{
Assembly assembly;
string resourceName = string.Format("Assets.Assemblies.{0}.dll", askedAssembly.Name);
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
if (stream == null)
{
LogManager.Instance.Write(LogMessageTypes.Fatal, string.Format("Can not resolve asked assembly: {0}", askedAssembly.Name));
MessageBox.Show(i18n.CanNotLoadRequiredAssembliesMessage, i18n.CanNotLoadRequiredAssembliesTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
assembly = Assembly.Load(assemblyData);
}
LogManager.Instance.Write(LogMessageTypes.Trace, "Loaded embedded assembly: " + askedAssembly.Name);
return assembly;
}
}
Теперь моя программа ссылается на эти сборки библиотек.
- Esent.Collections.dll
- Esent.Interop.dll
- HtmlAgilityPack.dll
- Ionic.Zip.Reduced.dll
- System.Windows.Forms.Calendar.dll
- AxInterop.ShockwaveFlashObjects
- Interop.ShockwaveFlashObjects
- irrKlang.NET4.dll
- ikpMP3.dll
- Nini.dll (решено)
С моим резольвером выше;я могу встроить Esent.Collections, Esent.Interop, HtmlAgilityPack, Ionic.Zip.Reduced, System.Windows.Forms.Calendar, AxInterop.ShockwaveFlashObjects, Interop.ShockwaveFlashObjects и решить их во время выполнения.
*приходит с irrKlang.NET.4, сборками Nini и ShockwaveFlash, в которых, если я пытаюсь встроить эти сборки и решить их во время выполнения, у меня возникают проблемы.
Для irrKlang я могу понять проблему как irrKlang.Сборка NET4 ссылается на неуправляемый файл ikpMP3.dll, который я не могу найти самостоятельно.
Для Nini.dll, на самом деле я могу встроить эту сборку и использовать запущенные конфигурации отладки / выпуска VS, она просто работает нормально, но когда яЗапустите программу самостоятельно из проводника, программа просто отказывается запускаться (без ошибок или какой-либо информации).
Любая помощь приветствуется.
Обновление Теперь, благодаря ответу Марка Гравелла, я могу загрузить файл Nini.dll.
Для части irrKlang, поскольку irrKlang.NET4.dll является управляемой сборкой.bly, который требует ikpMp3.dll - неуправляемый - если я пытаюсь разрешить irrKlang.NET4.dll во время выполнения, он может получить доступ к своей требуемой зависимости ikpMp3.Есть ли обходной путь для этого?