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-зависимую сигнатуру в двоичный файл, а десериализация проверяет эту сигнатуру. Вы можете решить эту проблему двумя способами:

  1. Наличие кода сериализации / десериализации в DLL, вызываемой двумя приложениями
  2. Использование XML-сериализации вместо двоичной сериализации (это не всегда возможно, это зависит от данных, которые вы хотите сериализовать)

Вы можете найти более подробную информацию об этой ситуации в этой статье.

Другие вопросы по тегам