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 依存の署名がバイナリ ファイルに配置され、逆シリアル化によってこの署名がチェックされます。この問題は、次の 2 つの方法で解決できます。

  1. 2 つのアプリケーションによって呼び出される DLL にシリアル化/逆シリアル化コードを含める
  2. バイナリ シリアライゼーションの代わりに XML シリアライゼーションを使用する (これは常に可能であるとは限りません。シリアライズするデータによって異なります)。

この状況の詳細については、この記事を参照してください。

于 2015-05-01T11:24:12.720 に答える