Я подумал, что быстро поделюсь своим подходом на тот случай, если кому-нибудь когда-нибудь понадобится сделать это или что-то подобное, поскольку проблемы будут общими для других собственных библиотек C ++ в Azure.
Проблема заключалась вряд вещей: Azure не имеет всех библиотек времени выполнения VC ++, необходимых для Z3;установка Z3, не включающая другие его зависимости в его корзину;Не удается скомпилировать службы Silverlight RIA, если в решении или в папке bin имеются 64-битные библиотеки;Azure не работает 32-битной версии Z3 DLL;Azure не имеет среды выполнения F # и т. Д.
Вот как я это получил:
Абстрагируем интерфейс для кода, который вызывает Z3 (В моем случаес интерфейсом IXxxAnalyzer в XxxAnalyzerCommon.dll)
Не добавляйте конкретную реализацию F # этого интерфейса непосредственно в решение в качестве ссылки, контента или ресурса.
Вместо этого используйте zip-библиотеку .NET для упаковки:
a. XxxAnalyzer64.dll (64bit version of the F# implementation of IXxxAnalyzer)
b. XxxAnalyzerCommon.dll
c. FSharp.Core.dll
d. FSharp.PowerPack.dll
e. Microsoft.Z3.dll (64bit version)
Добавьте zip-файл в качестве содержимого в веб-проект
Добавьте распространяемый VC ++ (64-битный) vcredist_x64.exe в качестве содержимого для веб-проекта
Создайте задачу запуска Azure, которая автоматически устанавливает Redist VC ++, когда егопервое развертывание.
Создание ресурса локального хранилища Azure в конфигурации роли
При запуске извлеките zip-файл в локальное хранилище (если оноеще не существует)
Используйте MEF (Managed Extensibility Framework) для динамического импорта конкретного IAnalyzer с помощью DirectoryCatalog, указывающего на локальное хранилище - поэтому проекту не нужно иметь какой-либопрямая ссылка или зависимость от XxxAnalyzer64.dll.
Также была проблема с FSharp.PowerPack.dll, которая строго ссылалась на более раннюю версию FSharp.Core.dll, которую мне приходилось использоватьАссамблея RОператор edirect в файле web.config для разрешения.