Это ошибка или я что-то упустил с WF Designer

Вот сценарий, обнаруженный при попытке устранить ту же проблему в конструкторе, размещенном самостоятельно. Создайте проект библиотеки с типом в нем. Мое это.

namespace RaceEventLibrary
{
    public class Registration
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string EventName { get; set; }
    }
}

Теперь создайте консольное приложение Workflow 4.5 (или службу, это не имеет значения). Ссылка на проект библиотеки. Поместите последовательность в конструктор, а затем создайте InArgument этого типа библиотеки, "Регистрация" в моем случае. Все хорошо, дизайнер доволен.

Затем создайте другой идентичный проект, ссылаясь на ту же библиотеку. Теперь просто откройте файл xaml из первого проекта. Бум, он не может найти типы.

System.Xaml.XamlException: "Не удалось разрешить тип" InArgument(r:Registration) "свойства" registration ".'

Это в xaml:

    <x:Members>
        <x:Property Name="registration" Type="InArgument(r:Registration)" />
    </x:Members>

preceded by 
    xmlns:r="clr-namespace:RaceEventLibrary;assembly=RaceEventLibrary"

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

Любые предложения о том, как это исправить?

1 ответ

Решение

В WF4 есть свои способы загрузки сборок, которые не всегда совпадают со стандартной платформой.NET. Рон Джейкобс сделал интересное количество сообщений об этом, см. Здесь для начала.

Вы не упоминаете, как на самом деле загружаете рабочий процесс в WorkflowDesigner. Есть несколько способов сделать это. При использовании ActivityXamlServices.CreateBuilderReader() вы можете указать с помощью XamlSchemaContext, какие сборки требуются. Это должно позволить вам загрузить рабочий процесс.

Другие вопросы по тегам