最初の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によってSQLServerCEをインストールする必要がある場合があります。ああ、私のビルドはコードコントラクトリファレンスアセンブリをビルドしません。静的チェックを実行し、実行時チェックを実行するために書き換えを実行しようとします。
最後に、AppHarbor.slnからコードコントラクトを無効にしようとしましたが、その設定はプロジェクト設定であり、ソリューション設定ではないため、通常のソリューションファイルでも無効になります。