Загрузить пользовательскую сборку в диалоге
Я использую пользовательский диалог в проекте консольного приложения установки wixsharp.
Я ссылался на 2 сборки, которые я хочу использовать в пользовательском диалоге. Каждый раз, когда диалог загружается, он пытается загрузить сборки, но не удается. Дается ошибка, что файлы не найдены.
Можно ли даже загрузить пользовательские сборки в пользовательском диалоговом окне и как это сделать?
1 ответ
Я считаю, что EmbeddedAssembly
класс - это то, что вам нужно использовать. Он встраивает сборку непосредственно в файл MSI специально для использования в настраиваемых действиях.
Я не нашел никаких подходящих методов, как заставить это работать. Я пытался добавить:
new ManagedProject("Setup",
new Binary(new Id("INIFileParser"), "INIFileParser.dll") { IsAssembly = true });
Но мне не повезло. Итак, я использовал самый простой обходной путь:
- Добавлены во встроенный файл ресурсов все необходимые сборки:
- Добавлен обработчик AssemblyResolve, и когда моя сборка не найдена, я ловлю ее и загружаю сборку из ресурсов.
private static readonly IDictionary<string, byte[]> NameToAssemblyResourceMap = new Dictionary<string, byte[]>
{
{"ObjectListView", Resources.ObjectListView},
{"INIFileParser", Resources.INIFileParser},
{"Microsoft.Web.Administration", Resources.Microsoft_Web_Administration }
};
...
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
foreach (var pair in NameToAssemblyResourceMap)
{
if (args.Name.Contains(pair.Key))
{
return Assembly.Load(pair.Value);
}
}
var message = string.Format("Assembly not founded {0}", args.Name);
MessageBox.Show(message, "Error", MessageBoxButtons.OK);
Shell.Exit();
return null;
};