Сборка не может быть отлита - PullRequest
0 голосов
/ 27 февраля 2012

Вот мой код, который загружает файл DLL и записывает информацию о файле в XML:

MyOptions ass = MyOptionsList[MyOptionsList.Count - 1];
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
StringWriter sw = new StringWriter();
XmlSerializer serializer = new XmlSerializer(ass.GetType(),
    new Type[] { typeof(MyOptions) });
serializer.Serialize(sw, ass);
//more code writing in an xml file
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    return Assembly.LoadFrom(correctPath + ".dll");
}

Проблема возникает в строке serializer.Serialize(sw, ass);. Внутреннее исключение говорит о том, что я не могу разыгрывать из одной библиотеки в другую. Оба файла DLL имеют одинаковое имя. Один находится на correctPath, а второй - на другом пути. Как решить эту проблему?

MyOptions - это проект библиотеки классов, из которого расширяется загружаемая мной библиотека.

1 Ответ

2 голосов
/ 27 февраля 2012

Я только что попробовал нижеприведенное без проблем, я думаю, что ваша проблема должна лежать в другом месте.

public class MyOptions
{
  public int n;
}

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
  return Assembly.LoadFrom(@"C:\windwos\test.dll");
}

static void Main(string[] args)
{
  MyOptions ass = new MyOptions();
  AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
  StringWriter sw = new StringWriter();
  XmlSerializer serializer = new XmlSerializer(ass.GetType(), new Type[] { typeof(MyOptions) });
  serializer.Serialize(sw, ass);
  //more code writing in an xml file
  AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
}

Обратите внимание, что код события не вызывается.

...