У меня есть .dll, которая скомпилирована для 64-битных, содержит класс, который я могу сериализовать в XML.Библиотека скомпилирована в Visual Studio с использованием флага «AnyCPU».
У меня есть другой процесс, который ссылается на этот .dll, создает объект этого типа, а затем пытается сериализовать его в XML следующим образом:
XmlSerializer serializer = new XmlSerializer(typeof(COLLADA));
using (TextWriter w = new StreamWriter(m_colladaPath, false, System.Text.Encoding.UTF8))
{
serializer.Serialize(w, collada.COLLADA); //exception occurs here
}
Этот процесс работает правильно на 32-битной машине.При попытке на 64-битной машине код компилируется без ошибок, но во время выполнения я получаю сообщение об ошибке «Target Invocation» следующим образом:
System.Reflection.TargetInvocationException произошла Message = "Исключение было вызваноцель вызова ".Source = "mscorlib"
StackTrace: at System.RuntimeMethodHandle._InvokeMethodFast (Объектная цель, аргументы Object [], SignatureStruct & sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) в System.RuntimeMethoFidOfficeMjectOkeHDsig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) InnerException: System.BadImageFormatException Message = "Не удалось загрузить файл или сборку" goBIM_API, Version = 1.0.3922.23514, Culture = нейтральный, PublicKeyToken = null 'или одна из его зависимостей. Попытка.было сделано для загрузки программы с неверным форматом. " Source =" xnzfsdbo "FileName =" goBIM_API, Version = 1.0.3922.23514, Culture = нейтральный, PublicKeyToken = null "FusionLog = StackTrace: at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCOLLADA.Write653_COLLADA (Object o) InnerException:
Я трижды проверил, что теперь все скомпилировано для AnyCPU, а также попытался скомпилировать Everything, включая библиотеку, до "x64", безуспешно.Я не использую какие-либо конкретные битовые указатели, например, "IntPtr" в библиотеке.
ОБНОВЛЕНИЕ: Я создал автономное приложение, используя эту библиотеку, создал тестовый объект и сериализовал его без ошибок (все в x64).Кажется, проблема связана с тем фактом, что сериализация происходит в методе, вызываемом другим приложением.То есть метод является частью интерфейса подключаемого модуля для другого приложения.Что-то в API приложения мешает с сериализацией.Приложение Autodesk's Revit.Не уверен, что кто-нибудь здесь является гуру Revit?