CodeContracts 构建失败似乎没有任何原因
CodeContracts fails the build for seemingly no reason
我有一个使用代码契约的 C# PCL 项目。然而,在 TeamCity 上,项目构建失败,但看起来构建在本地是成功的。然而,构建日志确实声称构建确实失败了,但它没有给出任何理由。
'Fail build on warnings' 已禁用。
我收到一个奇怪的警告:
CodeContracts: Could not find the method/type
'System.Diagnostics.Contracts.PureAttribute' in assembly '[project
path]\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll'
搜索 google 让我 one relevant result 找到了一个有同样问题的人。
但是它除了颠簸之外没有任何反应。
我也觉得这行很奇怪:
C:\Windows\system32******.dll (1,1): message : CodeContracts: Checked 3154
assertions: 2821 correct (333 masked)
为什么二进制文件位于 system32?我认为 MSBuild 甚至没有对该文件夹的写入权限...
问题似乎是默认情况下它在 Microsoft.Contracts 中查找合同类型(per spec) which doesn't work because Microsoft.Contracts is not what I am using. I'm using System.Diagnostics.Contracts, which is located in mscorlib. It doesn't tell me this, rather it does something non-sensical. I started looking through the source code and I found the offending code 但我认为这段代码质量很差,所以我放弃了实际发现问题并创建拉取请求。
然而,当您知道解决方案很简单:您需要使用 mscorlib 覆盖合约库的默认值 Microsoft.Contracts,因此只需将以下内容添加到静态分析器的命令行:
-cclib mscorlib
这至少对我有用。我仍然认为这是由代码合同中的两个错误引起的:
- 由于警告,构建失败。
- 它试图在错误的程序集中找到
PureAttribute
。
我有一个使用代码契约的 C# PCL 项目。然而,在 TeamCity 上,项目构建失败,但看起来构建在本地是成功的。然而,构建日志确实声称构建确实失败了,但它没有给出任何理由。
'Fail build on warnings' 已禁用。
我收到一个奇怪的警告:
CodeContracts: Could not find the method/type 'System.Diagnostics.Contracts.PureAttribute' in assembly '[project path]\packages\Microsoft.Net.Http.2.2.29\lib\portable-net40+sl4+win8+wp71+wpa81\System.Net.Http.dll'
搜索 google 让我 one relevant result 找到了一个有同样问题的人。 但是它除了颠簸之外没有任何反应。
我也觉得这行很奇怪:
C:\Windows\system32******.dll (1,1): message : CodeContracts: Checked 3154 assertions: 2821 correct (333 masked)
为什么二进制文件位于 system32?我认为 MSBuild 甚至没有对该文件夹的写入权限...
问题似乎是默认情况下它在 Microsoft.Contracts 中查找合同类型(per spec) which doesn't work because Microsoft.Contracts is not what I am using. I'm using System.Diagnostics.Contracts, which is located in mscorlib. It doesn't tell me this, rather it does something non-sensical. I started looking through the source code and I found the offending code 但我认为这段代码质量很差,所以我放弃了实际发现问题并创建拉取请求。
然而,当您知道解决方案很简单:您需要使用 mscorlib 覆盖合约库的默认值 Microsoft.Contracts,因此只需将以下内容添加到静态分析器的命令行:
-cclib mscorlib
这至少对我有用。我仍然认为这是由代码合同中的两个错误引起的:
- 由于警告,构建失败。
- 它试图在错误的程序集中找到
PureAttribute
。