WorkflowInspectionServices выдает мне исключение XamlObjectWriterException в Workflow Foundation - PullRequest
1 голос
/ 12 апреля 2011

Для простого прототипа я должен отобразить файл рабочего процесса и показать, на каком этапе мы на самом деле.

Я нашел образец здесь: http://msdn.microsoft.com/en-us/library/ee624139.aspx

Который почтичто мне нужно.

В этом примере все действия никогда не ждут другого действия.Итак, я создал для себя очень глупую активность:

    public class WaitForNextCall :NativeActivity
{
    public const String WaitBookmark = "WaitingStep";


    #region Overrides of NativeActivity

    /// <summary>
    /// When implemented in a derived class, runs the activity’s execution logic.
    /// </summary>
    /// <param name="context">The execution context in which the activity executes.</param>
    protected override void Execute(NativeActivityContext context)
    {
        context.CreateBookmark(WaitBookmark);
    }

    protected override bool CanInduceIdle
    {
        get
        {
            return true;
        }
    }
    #endregion
}

, которая, кажется, работает.Так как там я создавал свой рабочий процесс непосредственно в коде:

            return new Sequence()
                   {
                       Activities =
                           {
                               new WaitForNextCall(){DisplayName = "Step one"},
                               new WaitForNextCall(){DisplayName = "Step Two"},
                               new WaitForNextCall(){DisplayName = "Step Three"},
                               new WaitForNextCall(){DisplayName = "Step Four"}
                           }
                   };

Единственная проблема с этим заключается в том, что я вижу только элемент "Последовательность" в конструкторе рабочих процессов.

Итак, я создалфайл xaml, который описывает точно то же самое, и я загружаю его так:

return ActivityXamlServices.Load("Workflows/WorkflowSample.xaml") as DynamicActivity;

Но потом я получил это исключение:

    System.Xaml.XamlObjectWriterException occurred
  Message=Impossible de créer le type inconnu '{clr-MyTestNameSpace.UserInterface.WorkflowItems}WaitForNextCall'.
  Source=System.Xaml
  LineNumber=0
  LinePosition=0
  StackTrace:
       à System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
       à System.Xaml.XamlWriter.WriteNode(XamlReader reader)
       [...] 

Я дважды проверил, файлприсутствует (кажется, что есть другое сообщение об ошибке, когда файл не указан правильно).Но он не может найти мой класс «WaitFornextCall», который используется всего несколькими строками ниже.

Я немного разочарован, я пытаюсь понять, как работает основ Workflow, но сейчас это немного сложно:(

Любой совет будет приветствоваться

Редактировать: я пытался это прочитать файл, у меня нет никаких исключений в моем конструкторе, но я не знаю почему, некоторые библиотеки яЯ использую (ActiPro), кажется, больше не работает после загрузки:

        XamlReader reader = new XamlXmlReader("Workflows/WorkflowSample.xaml", new XamlXmlReaderSettings(){LocalAssembly =  System.Reflection.Assembly.GetExecutingAssembly()});

        return ActivityXamlServices.Load(reader);

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Я нашел решение !!!!

YEAAAAAAAAAAAAAH: P

На самом деле проблема заключается в том, что мой рабочий процесс был в том же проекте, что и мои пользовательские действия.И тогда Visual Studio не указывает, в какой сборке дизайнер мог найти это действие, но когда вы читаете файл, это независимый читатель, который не знает, какая у вас текущая сборка.

Таким образом, наличие ДВУХ разныхпроект, один из которых содержит рабочий процесс, другой содержит действия, а затем мой рабочий процесс указывает сборку, в которой я могу найти диаграмму.Таким образом, я легко могу сделать WorkflowDesigner.Load ("myWorkflowHere.xaml");без проблем!

0 голосов
/ 12 апреля 2011

"Workflows / WorkflowSample.xaml", вероятно, был создан на основе предыдущей версии вашего кода.

Удалите его, перестройте решение, а затем воссоздайте его.

...