Параллельное управление версиями Windows Workflow 4.5- как загрузить правильные версии бизнес-dll

Я разместил две версии рабочего процесса (WF 4.5). Следуйте инструкциям, как в этом примере MSDN - https://code.msdn.microsoft.com/windowsapps/Side-by-Side-Versioning-0fe24cd3. Предоставленная параллельная функциональность позволяет настроить службу рабочего процесса так, чтобы новые экземпляры службы рабочего процесса создавались с использованием нового определения рабочего процесса, а запуск экземпляров завершался с использованием существующего определения.

Рабочий процесс (xamlx) использует несколько функций, определенных в другой библиотеке классов "MessageGeneration.dll". Также есть изменения в этих функциях. Итак, есть две версии рабочего процесса и MessageGeneration.dll. WF-v1 должен использовать MessageGeneration.dll-v1, а WF-v2 должен использовать MessageGeneration.dll-v2.

Любые предложения по решению этой проблемы будут полезны. Благодарю.

1 ответ

Я не знаком с тем, как работают процессы WF, однако следующий подход обычно работает в таких сценариях:

Вы можете указать двоичное местоположение для конкретной версии в файле конфигурации (app.config/web.config), где CLR ищет место при разрешении двоичного файла. Общая информация о CodeBase.

Вот пример:

<dependentAssembly>
            <assemblyIdentity name="assembly name" publicKeyToken="token" culture="neutral" />
            <codeBase version="specific version" href="bin/binary.dll" />
            <codeBase version="specific version" href="bin/subBin/binary.dll" />
        </dependentAssembly>

здесь, binary.dll под subBin v2 рассматриваемого двоичного файла. Теперь, чтобы это работало, WF не должен пытаться создавать экземпляры обоих двоичных файлов вместе. Это может быть обработано удалением любых открытых путей кода, которые ищут этот двоичный файл. Вероятно, вы могли бы вызывать методы в вышеупомянутых двоичных файлах, используя фабрику, которая будет иметь методы, помеченные как внутренние, чтобы при создании экземпляра WF-процесса binary.dll не загружался.

Он не сможет загрузить двоичный файл, так как href кодовой базы будет неправильным. Используйте Procmon, чтобы увидеть, какие места проверяются для загрузки двоичного файла. Основываясь на отчете procmon, либо путь в конфигурации может быть фиксированным, либо двоичный файл может быть помещен в двоичную строку.

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