自從微軟作了一個艱難的決定——.NET Core完全放棄project.json,全面改回.csproj——至今,雖然讚美之聲不斷,但我依然不喜歡也難以接受這樣的改變。 json
難以接受主要有兩方面的緣由:app
1)由繁入簡易,由簡入繁難工具
習慣了json格式的簡潔,很難再適應xml格式的繁瑣。不管微軟怎麼簡化.csproj,與project.json天生的簡潔相比也是可望不可即。簡單對比一下,立馬就能體會到。ui
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="15.0"> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.DataProtection" Version="1.2.0-*" /> </ItemGroup> </Project>
{ "dependencies": { "Microsoft.AspNetCore.DataProtection": "1.2.0-*" } }
用 project.json 的時候常常喜歡直接在 project.json 文件中修改,但是面對 .csproj 卻少了直接修改的慾望。spa
2)xml與json配置文件的混雜帶來不一致的編輯體驗設計
改變的只是project.json,其它的配置文件依然是json格式,好比appsettings.json,二者混雜在一塊兒更顯.csproj的格格不入,僅僅這個不一致的編輯體驗就讓人難以適應。code
那微軟爲何要作這樣一個打本身臉的艱難決定?我想根本緣由是爲了 .NET Core 能用上歷史悠久的 MSBuild 做爲 Build工 具,.NET 平臺上的不少工具都依賴 MSBuild ,繼續使用 MSBuild 有很大的連鎖效益。但讓 .NET Core 用上 MSBuild 並不是只有這一條路,好比讓 MSBuild 支持 project.json ,微軟爲何選擇放棄 project.json 的下策呢?要麼微軟偷懶,要麼由於 MSBuild 的自己設計問題形成很難實現對 project.json 的支持?後者的可能性很是大,由於 MSBuild 過於依賴 xml 配置文件(build任務都是經過xml配置定義的),要它支持另一種格式的配置文件改動可能很是大,微軟選擇這樣的下策可能處於無奈。雖然理解微軟的難處,但站在用戶的角度,我仍是更喜歡 project.json,難以接受 .csproj。xml