0

我为驻留在 ac# .net4.5 程序集中的自定义类创建了一个调试器可视化工具。在 IVisualizerObjectProvider 上调用 GetObject 时,System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly() 函数会抛出无法找到程序集异常。

CustomClass 和父类引用的所有类都具有 [Serializable] 属性。该程序集与 MoreLinq 依赖项一起放置在 MyDocuments\Visual Studios 2013\Visualizers 文件夹中的 Debugger 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();
        }
    }
}
4

1 回答 1

0

阅读您的问题,您似乎正在从一个应用程序序列化并从另一个应用程序反序列化。你不是吗?如果是这种情况,这就是问题的原因:序列化将依赖于 exe 的签名放入二进制文件中,反序列化会检查此签名。您可以通过两种方式解决此问题:

  1. 将序列化/反序列化代码放在由两个应用程序调用的 DLL 中
  2. 使用 XML 序列化而不是二进制序列化(这并不总是可行的,这取决于您要序列化的数据)

您可以在本文中找到有关这种情况的更多详细信息。

于 2015-05-01T11:24:12.720 回答