,我想我会很快分享我的做法的情况下,没有人需要再做一次或类似的东西,因为这些问题会共同在Azure中的其他本地C++库。
的问题是有很多事情要做:Azure中不具有Z3所需要的所有VC++运行时动态链接库; Z3的安装不包括它的其他依赖项;如果解决方案或bin文件夹中存在任何64位dll,Silverlight RIA Services无法编译; Azure没有运行Z3 dll的32位版本; Azure的不具有F#运行等。
这是我如何得到它的工作:
抽象出来调用Z3(在我的情况下,代码的接口,具有XxxAnalyzerCommon的IXxxAnalyzer接口.dll)
不要将此接口的具体F#实现直接添加到解决方案中,作为参考,内容或资源。
相反,使用.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)
添加拉链作为内容的Web项目
添加VC++可再发行组件(64位)vcredist_x64.exe作为内容到网络项目
创建一个Azure启动任务,在第一次部署时以静默方式安装VC++ redist。
在你的角色配置
在启动时创建一个Azure的本地存储资源,解压压缩到本地存储(如果它尚不存在)
使用MEF(托管扩展框架)通过使用指向本地存储的DirectoryCatalog动态地导入具体的IAnalyzer - 因此该项目不需要对XxxAnalyzer64.dll有任何直接引用或依赖关系。
还有与FSharp.PowerPack.dll强烈引用FSharp.Core.dll的早期版本,我不得不使用一个大会重定向声明在web.config来解决问题。
Hi @Christoph 您是否已经到了Z3托管于Azure的舞台?您是否必须在Azure服务器上安装Z3 msi才能使其运行?另外,Z3 msi是否注册了所有的COM组件?我在尝试使Azure中加载Microsoft.z3.dll时遇到了很多麻烦,并试图通过各种方式使其能够访问z3.dll。 干杯 – Sam