Я предполагаю, что эта другая сборка не загружается до того, как WF пытается десериализоваться. Вы можете проверить это, просто обновив экземпляр этого типа до того, как ваше приложение начнет выполняться (т.е. в методе Main вашего класса Program для приложения winforms).
Если это так, вы можете попробовать несколько вещей.
Сначала , принудительная загрузка всех необходимых вам сборок в память перед десериализацией (как в тесте выше). Этот метод, имхо, отстой.
Секунду , вы можете добавить логику к разрешению типов во время выполнения. Это представляется возможным, но я никогда не делал этого.
Третий , измените ваш сериализованный рабочий процесс, чтобы предоставить ему информацию, необходимую для загрузки типа.
Я не уверен, как вы сериализуете свой рабочий процесс, поэтому я не могу точно сказать вам, как это сделать. Я могу сказать вам, что рабочие процессы сериализуются в 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 будет их учитывать. Черт, я даже не уверен, будет ли сериализатор Workflow в первую очередь учитывать пространство имен clr. Вы можете попробовать это, и если не задать другой вопрос о SO на основе этого.