[TFS 2017] 使用 Sandcastle 自動產生 Code Contract 說明文件

續上篇 https://dotblogs.com.tw/yc421206/2017/04/05/tfs_build_vnext_sandcastle_generate_live_document,我們已經自動化產生 API 說明文件了,若程式碼裡面有用到 Code Contract 還需要一些動作才能自動產生 Code Contract 的說明文件

為什麼要用 Code Contract?

如何使用 Code Contract

續上篇

開發環境

  • Windows Server 2016
  • SQL 2016 Devloper SP1
  • TFS 2017 Update1
  • VS 2017 Update1
  • VS 2015 Update3

前置安裝

本文連結

步驟

下載安裝 Code Contract at TFS  and Client

下面位置擇一

Github
https://github.com/Microsoft/CodeContracts/releases

Nuget(路徑會跟預設的不一樣)
https://www.nuget.org/packages/DotNet.Contracts

MarketPlace
https://marketplace.visualstudio.com/items?itemName=RiSEResearchinSoftwareEngineering.CodeContractsforNET

 

我從 MarketPlace 下載,TFS 跟 Client (不支援 VS2017) 都要安裝

安裝路徑:C:\Program Files (x86)\Microsoft\Contracts

Code Contracts at VS2015

產生 Contracts 的文檔

 

範例程式碼

/// <summary>
/// Class Order.
/// </summary>
public class Order
{
	/// <summary>
	/// 新增一筆訂單
	/// </summary>
	/// <param name="orderId">The source.</param>
	public void AddOneOrder(string orderId)
	{
		Contract.Requires<ArgumentNullException>(!string.IsNullOrWhiteSpace(orderId), "orderId");
		Contract.Ensures(orderId=="yao");
	}

	/// <summary>
	/// Tests the specified array.
	/// </summary>
	/// <param name="orderIds">The order ids.</param>
	/// <param name="orderId">The order identifier.</param>
	/// <returns>List&lt;System.String&gt;.</returns>
	public List<string> AddOneOrder(List<string> orderIds, string orderId)
	{
		Contract.Requires<ArgumentNullException>(orderIds != null, "orderIds");
		Contract.Requires<ArgumentNullException>(!string.IsNullOrWhiteSpace(orderId), "orderId");

		Contract.Ensures(orderIds.Count == Contract.OldValue(orderIds.Count) + 1);
		orderIds.Add(orderId);
		return orderIds;
	}
}

 

Build vNext via Visual Studio 2015

Visual Studio Version:Visual Studio 2015

這樣就能建置成功

 

Build vNext via Visual Studio 2017

Code Contract 不支援 VS 2017,相同的專案用VS 2017 開起來應該會得到下圖錯誤

解法就是在 TFS 2017 跟 Client 的 C:\Program Files (x86)\Microsoft\Contracts\MsBuild 目錄下,複製目錄 14.0 ,改成 15.0

 

由於 Code Contract 跟 VS 2017 還沒有整合,所以有一些行為會跟 VS 2015 不一樣

 

結果

完成之後,就能看到說明文件上面有 Contracts 的說明文檔

 

若有謬誤,煩請告知,新手發帖請多包涵

2010~2015 C# 第四季