2015-02-09 2 views
0

Я создал визуализатор отладчика для пользовательского класса, который находится в сборке C# .net4.5. При вызове GetObject на IVisualizerObjectProvider не удается найти исключение сборки, которое вызывается из функции System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly().IVisualizerObjectProvider GetObject бросает сборку не найденное исключение

Все мои классы, на которые ссылаются CustomClass и родительский класс, имеют атрибут [Serializable]. Сборка вместе с зависимостью MoreLinq помещается прямо рядом с сборкой Visualizer 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(); 
     } 
    } 
} 

ответ

0

Чтения вашего вопроса, похоже, вы сериализация из приложения и десериализаций от другого. Не так ли? Если это так, это является причиной вашей проблемы: сериализация помещает в двоичный файл зависимую подпись exe и выполняет десериализацию для этой подписи. Вы можете решить эту проблему двумя способами:

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

Более подробную информацию об этой ситуации можно найти в this article.