私の推測では、WF が逆シリアル化を試みる前に、この他のアセンブリが読み込まれていません。これをテストするには、アプリケーションの実行を開始する前に (つまり、winforms アプリの Program クラスの Main メソッドで)、この型のインスタンスを新規作成するだけです。
このような場合は、いくつかのことを試すことができます。
最初に、逆シリアル化の前にメモリに必要なすべてのアセンブリを強制的に読み込みます (上記のテストのように)。この方法は、私見ですが、最悪です。
次に、実行時の型解決にロジックを追加できます。 可能のようですが、やったことはありません。
3 番目に、シリアライズされたワークフローを変更して、タイプをロードするために必要な情報を提供します。
ワークフローをどのようにシリアライズしているかわからないため、これを行う方法を正確に説明することはできません。ワークフローは xaml にシリアル化されていると言えます。XamlReader は、逆シリアル化時に、xaml に含まれる型のアセンブリを読み込むことができます。これは、特殊なタイプの XML 名前空間を使用して行われます。
これが欠落しているタイプであるとしましょう (シリアル化されたワークフローで):
<MyType><!--blahblah--></MyType>
MyType は、アセンブリ MyCode.DLL で定義されています。
namespace MyCodeNamespace
{
public class MyType { /*yadda*/ }
}
このタイプの名前空間は次の clr-namespace:MyCodeNamespace;assembly=MyCode
ようになり、シリアル化されたワークフローでは次のように表示されます。
<MyType namespace="clr-namespace:MyCodeNamespace;assembly=MyCode"><!--blahblah--></MyType>
XamlReader はその名前空間を認識し、アセンブリが MyCode.DLL または MyCode.EXE と呼ばれていることを判別し、それを探してメモリに読み込み、MyCodeNamespace.MyType を探します。
問題は、「ワークフローでその名前空間をシリアル化するにはどうすればよいですか?」ということになります。答えは「わからない」です。おそらく、次のアセンブリ属性を使用できます。
[assembly: XmlnsPrefix("clr-namespace:MyCodeNamespace;assembly=MyCode", "MyCode")]
[assembly: XmlnsDefinition("clr-namespace:MyCodeNamespace;assembly=MyCode", "MyCodeNamespace")]
しかし、ワークフローシリアライザーがこれらを尊重するかどうかはわかりません。そもそも、Workflow シリアライザーが clr-namespace を尊重するかどうかさえわかりません。あなたはそれを試すことができます.そうでない場合は、これに基づいてSOについて別の質問をしてください.