我有一个使用代码契约的C#PCL项目。但是,在TeamCity上,该项目无法构建,但看起来在本地构建成功。但是,构建日志确实声称构建确实失败,但是根本没有给出任何理由。
“警告失败构建”被禁用。
我收到一个奇怪的警告:
CodeContracts:找不到方法/类型
程序集'[项目中的'System.Diagnostics.Contracts.PureAttribute'
路径] \ packages \ Microsoft.Net.Http.2.2.29 \ lib \ portable-net40 + sl4 + win8 + wp71 + wpa81 \ System.Net.Http.dll'
搜索谷歌给我one relevant result与遇到相同问题的人。
但是,除了碰撞,它没有其他反应。
Build log
我也觉得这行很奇怪:
C:\ Windows \ system32 ******。dll(1,1):消息:CodeContracts:已检查3154
断言:2821正确(已屏蔽333)
为什么二进制文件位于system32中?我认为MSBuild甚至都没有对该文件夹的写权限...
最佳答案
问题似乎是它默认情况下会在Microsoft.Contracts(per spec)中查找合同类型,因为Microsoft.Contracts不是我正在使用的合同类型,所以该类型不起作用。我正在使用mscorlib中的System.Diagnostics.Contracts。它并没有告诉我,而是做了一些荒谬的事情。我开始浏览源代码,并found the offending code,但是我认为该代码的质量很差,因此我放弃了实际查找问题并创建请求请求的权限。
但是,解决方案很简单:您需要覆盖合约库的默认值Microsoft.mscorlib与Contracts进行合约,因此只需将以下内容添加到静态分析器的命令行中即可:-cclib mscorlib
这至少对我有用。我仍然认为这是由代码合同中的两个错误引起的:
由于出现警告,它使构建失败。
它试图在错误的程序集中找到PureAttribute
。