Чтобы зарегистрировать компоненты AspPDF и AspJPEG в облачном сервисе Windows Azure, процесс регистрации DLL должен быть включен в процедуру развертывания. Когда Azure распаковывает приложение, он должен запустить команду для регистрации DLL, это должно быть сохранено на всех виртуальных машинах, чтобы гарантировать, что эти зависимости работают последовательно в облачной среде.
Для этого мы можем указать командный файл, который будет выполнен на целевом сервере. Эта задача определена в файле ServiceDefinition.csdef следующим образом:
<Startup>
<Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>
Контекст повышенное исполнение гарантирует, что этот процесс должен проводиться до того, как служба идет жить. Контроллер Azure Fabric будет смотреть в папке BIN для файла .cmd. Вы можете создать .cmd в Блокноте, а затем изменить расширение. Вот содержимое файла .cmd.
chcp 1252>NUL
regsvr32 /s .\library\asppdf64.dll
regsvr32 /s .\library\aspjpeg64.dll
exit /b 0
Мы вызываем инструмент regsvr32 с параметром/с, это гарантирует, что ответ молчит, то есть без каких-либо всплывающих окон, которые запутывают контроллер ткани. Это важно, так как я потратил много времени на то, чтобы узнать, почему процесс развертывания висит на этапе инициализации ... добавление параметров/s решило эту проблему!
В моем случае я поместил библиотеки DLL в папку с именем library, но вы можете поместить их туда, где вам нравится, если они правильно указаны в файле .cmd. Не забудьте также установить следующие свойства файла для любой библиотеки DLL, указанного в команде запуска в Visual Studio:
Сложение Действие: Content
Копировать в выходной каталог: Всегда
Этот дополнительный процесс для регистрации DLL добавляется почти незначительное количество времени на процесс развертывания. Еще один момент, характерный для AspPDF, - это важность использования правильной версии DLL. Persits выпускает 32-битную и 64-разрядную dll, Azure VM работают в 64-битной среде, поэтому важно зарегистрировать asppdf64.dll в описанном выше процессе, регистрация 32-разрядной DLL вызовет туманную ошибку в вашем приложении. К счастью, вам не нужно приобретать отдельную лицензию для 64-разрядной версии AspPDF.
Я надеюсь, что это поможет другим людям, сталкивающимся с аналогичными проблемами, перенося компоненты класса com, такие как AspPDF на Azure.
Я застрял в этом вопросе какое-то время ... В моем случае мне нужно установить vsredist_x64.exe на сервер. Как проверить правильность выполнения запуска? Я не уверен, что все файлы находятся в правильном месте. Я помещал все файлы зависимостей в папку bin проекта asp.net и делал их «копией всегда». Правильно ли это? – newman
А, я также поместил файл партии (cmd) в папку bin проекта asp.net. Мне интересно, как команда запуска в проекте облачных сервисов находит этот файл (в другом проекте)? – newman
@QFDev Это работает в Паасе? Спасибо – Juanjo