Nano Hash - криптовалюты, майнинг, программирование

WF4 Runtime пытается загрузить слабосвязанный конструктор действий

Я создал настраиваемое действие кода, также с настраиваемым дизайнером, которое я применил к действию, используя следующее соглашение

[Designer("MyDesignerType, Assembly, Version=1.0.0.0, PublicKeyToken=XXX")]

Это работает во время разработки, мой дизайнер загружен (если я помещаю его в GAC) и используется для отображения моей активности в области дизайна.

Когда я публикую свой рабочий процесс, DLL конструктора находится не на рабочем сервере (это именно то, что я планировал, поэтому я обратился к дизайнеру через версию конструктора DesignerAttribute со строгим именем, а не создавал жесткую ссылку на конструктор DLL).

ОДНАКО, когда среда выполнения загружает рабочий процесс на производственный сервер - она ​​выдает исключение TypeNotFound - пытается загрузить MyDesignerType / DLL. ЗАЧЕМ?? Почему, черт возьми, среда выполнения рабочего процесса пытается загрузить функциональность времени разработки во время выполнения ?? Вся причина того, что DesignerAttribute поставляется со слабосвязанным конструктором, заключается в том, чтобы избежать развертывания дизайнерских DLL с продуктом ...

Любая помощь будет принята с благодарностью.

Спасибо


  • Вероятно, не здесь происходит действие. Прослушайте событие TypeResolve, обратите внимание на попытки загрузите эту сборку во время выполнения, а затем проверьте стек вызовов, когда он сработает. Там вы найдете свой ответ. 15.03.2013

Ответы:


1

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

Итак, в основном, для поддержки вашего сценария у вас будет 2 таких DLL:

  • MyProject.Activities.dll
  • MyProject.Activities. Design.dll

Ключевой частью здесь является Design.dll. Внутри этой dll у вас должен быть класс, реализующий IRegisterMetadata и здесь происходит волшебство.

Типы IRegisterMetadata предоставляют способ инкапсулировать связь атрибутов времени разработки с типами времени выполнения в слабосвязанной манере. Приложение, в котором размещен конструктор рабочих процессов Windows, может использовать интерфейс IRegisterMetadata для регистрации атрибутов действия. Например, Visual Studio 2010 ищет типы, реализующие IRegisterMetadata, при загрузке сборок, содержащих эти типы, в дополнение к поиску типов в сборках * .design.

Как зарегистрировать дизайнера на мероприятии через IRegisterMetadata:

class Metadata : IRegisterMetadata
{
    public void Register()
    {
        AttributeTableBuilder builder = new AttributeTableBuilder();
        // Register Designers.
        builder.AddCustomAttributes(typeof(MyActivity), new DesignerAttribute(typeof(MyActivityDesigner)));
        // Apply the metadata
        MetadataStore.AddAttributeTable(builder.CreateTable());
    }
}

Дизайнер рабочего процесса Visual Studio будет искать DLL, заканчивающуюся на .Design.dll, и, найдя ее, выполнит IRegisterMetadata.Register(), где вы присоединяете дизайнеров к действиям.

15.03.2013
  • Спасибо, Хота. В интересах других - моя установка состояла из трех проектов: XXX.dll (проект деятельности), XXX.Design.dll (дизайнер) и YYY.dll (проект, содержащий мои рабочие процессы). Чтобы Visual Studio успешно обнаружила мою дизайнерскую DLL и выполнила регистрацию, XXX.Design.dll ДОЛЖЕН находиться в выходном каталоге проекта ACTIVITY ... поэтому вам, вероятно, понадобится этап после сборки в проекте действия, который копирует DLL конструктора в выходной каталог активности. 19.03.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..