我正在尝试部署我的第一个 AppHarbor 托管的应用程序,但我的构建遇到了问题。在代码合同尝试重写程序集之前,一切都很好。日志中的错误是:
CodeContractsRunCodeAnalysisInternal:
CodeContracts: Task manager is unavailable (unable to run in background).
CodeContracts: ABC: Run static contract analysis.
CodeContracts: ABC: Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified.
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.SQLCacheDataAccessor.GetMetadataOrNull(String key, Boolean silent)
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.CacheManager`11.TestCache()
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.CacheManager`11..ctor(Dictionary`2 methodAnalyses, Dictionary`2 classAnalyses, GeneralOptions options)
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.CacheManager`11.Create(Dictionary`2 dictionary, Dictionary`2 dictionary_2, GeneralOptions generalOptions)
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.Clousot.TypeBinder`9..ctor(String[] args, IDecodeMetaData`9 mdDecoder, IDecodeContracts`5 contractDecoder, IDictionary assemblyCache, Action`3 setTargetPlatform, IOutputFullResultsFactory`2 externalOutputFactory)
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.Clousot.ClousotMain[Local,Parameter,Method,Field,Property,Event,Type,Attribute,Assembly](String[] args, IDecodeMetaData`9 mdDecoder, IDecodeContracts`5 contractDecoder, IDictionary assemblyCache, Action`3 setTargetPlatform)
CodeContracts: ABC: at Microsoft.Research.CodeAnalysis.CCI1Driver.Main(String[] args)
CodeContracts: ABC:
CodeContracts: ABC: Static contract analysis done.
我知道在使用 Visual Studio 在本地构建时,代码合同的内容在后台线程中运行。也许 AppHarbor 不允许创建这样的线程来执行此操作?但是关于 System.Data.SqlServerCe.dll 缺少这个错误是什么?我的代码肯定不使用它,但也许 MS 代码合同可以使用?
只是想知道是否有人成功地将其中包含代码合同的代码部署到 AppHarbor,如果是,您做了什么使其工作?可能需要通过 AppHarbor 安装 SQL Server CE 才能使代码契约正常工作。哦,我的构建并没有构建代码契约引用程序集,它只是尝试进行静态检查并进行重写以完成运行时检查。
最后,我确实尝试从 AppHarbor.sln 禁用代码契约,但该设置是项目设置而不是解决方案设置,因此它也会为我的常规解决方案文件禁用它们。