У меня странная ситуация с сериализацией XML ...
Если я запускаю MyApp.exe (приложение .NET 2.0 WinForms) с правильно сгенерированным MyApp.XMLSerializers.dll, то все в порядке, и сериализация происходит быстро (сборки во время выполнения не генерируются, поскольку dll-сериализаторы найдены и работают) .
Теперь, если я встраиваю MyApp.exe как ресурс в MyOtherManagedApp.exe (также .net 2.0) и запускаю исходное приложение изнутри, как показано ниже ...
pasm = System.Reflection.Assembly.Load(MyOtherManagedApp.Properties.Resources.MyAppExeBinary);
Type type = pasm.GetType("MyApp.MyModule");
type.InvokeMember("Main", BindingFlags.Default | BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic, null, null, new object[] {args});
... оригинальное приложение загружается и работает нормально, за исключением части сериализации:
Если MyApp.XMLSerializers.dll присутствует в рабочем каталоге MyOtherManagedApp, я получаю сообщение об ошибке, указывающее, что сборка MyApp.exe не может быть найдена (ошибка генерируется автоматически сгенерированным MyApp.XMLSerializers.dll, который для некоторых странных причина, несмотря на то, что не только сборка MyApp была загружена, но и фактически выполняется, не может ее найти).
Если MyApp.XMLSerializers.dll НЕ присутствует в рабочем каталоге, ошибок не возникает, но сборки во время выполнения теперь генерируются, что приводит к значительному снижению производительности.
Итак, мой вопрос: почему он не работает так, как должен? А именно, почему MyApp.XMLSerializers.dll отлично работает, если MyApp.exe запускает сериализацию, когда он запускается сам по себе; тогда как, если он был запущен с помощью Assembly.Load и InvokeMember из другой сборки, MyApp.XMLSerializers.dll жалуется, что не может найти ту же сборку MyApp, которая была динамически загружена и сейчас выполняется?