IVisualizerObjectProvider GetObject выбрасывает сборку не найдено исключение
Я создал визуализатор отладчика для пользовательского класса, который находится в сборке aC# .net4.5. При вызове GetObject для IVisualizerObjectProvider не удается найти исключение сборки, которое вызывается из функции System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly().
Все мои классы, на которые ссылается CustomClass и родительский класс, имеют атрибут [Serializable]. Сборка вместе с зависимостью MoreLinq помещается прямо рядом со сборкой Debugger Visualizer в папке MyDocuments\Visual Studios 2013\Visualizer.
Кто-нибудь может дать мне какие-нибудь указатели?
Спасибо,
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualStudio.DebuggerVisualizers;
[assembly: System.Diagnostics.DebuggerVisualizer(
typeof(CustomClassVisualiser), typeof(VisualizerObjectSource),
Target = typeof(AnotherAssemblyNamespace.CustomClass), Description = "Custom class Visualiser")]
namespace Test
{
using System.Windows;
using Microsoft.VisualStudio.DebuggerVisualizers;
public class CustomClassVisualiser : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
MessageBox.Show("In");
var objectToVisualise = objectProvider.GetObject();// Failing here!! Unable to find assembly System.Runtime.Serialization.SerializationException
var type = objectToVisualise.GetType();
MessageBox.Show(type.FullName);
MessageBox.Show("");
//window.ShowDialog();
}
}
}
1 ответ
Читая ваш вопрос, похоже, что вы сериализуете из приложения и десериализуете из другого. Не так ли? Если это так, то это причина вашей проблемы: сериализация помещает exe-зависимую сигнатуру в двоичный файл, а десериализация проверяет эту сигнатуру. Вы можете решить эту проблему двумя способами:
- Наличие кода сериализации / десериализации в DLL, вызываемой двумя приложениями
- Использование XML-сериализации вместо двоичной сериализации (это не всегда возможно, это зависит от данных, которые вы хотите сериализовать)
Вы можете найти более подробную информацию об этой ситуации в этой статье.