Я пытался переустановить HAXM несколько раз, но продолжал получать ошибки.
В моем случае мне действительно нужно было войти в настройки Bios и включить виртуализацию.
Это сработало для меня. На всякий случай это помогает кому угодно.
Следующий фрагмент кода (C#) создает экземпляр любых реальных классов, полученных от Base
найденный в библиотеках классов (*.dll) в пути приложения, и хранит их в списке.
using System.IO;
using System.Reflection;
List<Base> objects = new List<Base>();
DirectoryInfo dir = new DirectoryInfo(Application.StartupPath);
foreach (FileInfo file in dir.GetFiles("*.dll"))
{
Assembly assembly = Assembly.LoadFrom(file.FullName);
foreach (Type type in assembly.GetTypes())
{
if (type.IsSubclassOf(typeof(Base)) && type.IsAbstract == false)
{
Base b = type.InvokeMember(null,
BindingFlags.CreateInstance,
null, null, null) as Base;
objects.Add(b);
}
}
}
Редактирование: классы, упомянутые Matt, вероятно, более оптимальный вариант в.NET 3.5.
С.NET 3.5 существует формализованный, испеченный - способом создать и загрузить плагины из приложения.NET. Это - все в Система. Пространство имен AddIn . Для получения дополнительной информации можно проверить эту статью о MSDN: Дополнения и Расширяемость
Одна подсказка должна загрузить все плагины и такой в собственный AppDomain, так как выполнение кода может быть потенциально злонамеренным. Собственный AppDomain может также использоваться, чтобы "отфильтровать" блоки и типы, которые Вы не хотите загружать.
AppDomain domain = AppDomain.CreateDomain("tempDomain");
И загрузить блок в домен приложения:
AssemblyName assemblyName = AssemblyName.GetAssemblyName(assemblyPath);
Assembly assembly = domain.Load(assemblyName);
Для разгрузки домена приложения:
AppDomain.Unload(domain);
Да, ++ Matt и Системе. AddIn (статья MSDN Magazine с двумя частями о Системе. AddIn доступны здесь и здесь ). Другая технология, на которую Вы могли бы хотеть посмотреть понять, где Платформа.NET могла бы входить в будущее, Управляемая Платформа Расширяемости в настоящее время доступна в форме CTP на Codeplex.
В основном можно сделать это двумя способами.
первое должно импортировать kernel32.dll и использовать LoadLibrary и GetProcAddress, когда Вы использовали его прежде:
[DllImport("kernel32.dll")]
internal static extern IntPtr LoadLibrary(String dllname);
[DllImport("kernel32.dll")]
internal static extern IntPtr GetProcAddress(IntPtr hModule, String procname);
второе должно сделать это в пути.NET: при помощи отражения. Система контроля. Пространство имен отражения и следующие методы:
First, Вы загружаете блок, он - путь, затем получите тип (класс) от него, он - имя, затем получите метод класса, он - имя снова, и наконец назовите метод с соответствующими параметрами.
Статья является немного более старой, но все еще применимой для создания слоя расширяемости в рамках Вашего приложения: