一、前言
本篇主要討論.NET Core應(yīng)用程序項目結(jié)構(gòu)的主題,重點探索.NET Core應(yīng)用程序的多平臺編譯問題,這里指的多平臺是指.NET Framework、.NET Core App、.NET Standard、Mono、UWP等多平臺的條件編譯、項目(包)引用、編譯符號等問題。
.NET Core已經(jīng)將新的項目管理配置過渡回MSBuild編譯系統(tǒng)中。雖然現(xiàn)在可以從無到有的使用VS2017來創(chuàng)建一個新的MSBuild項目,但是還是有好多遺留程序使用著以JSON格式存儲的項目配置文件為基礎(chǔ)的項目。Scott Hanselman也在博客中發(fā)文教大家怎么使用新的.NET SDK RC4工具將project.json轉(zhuǎn)換到MSBuild的.csproj項目系統(tǒng)。當(dāng)然這篇文章也解釋了MS為什么要這么做。
MSBuild 是一種基于 XML 的項目文件格式的項目配置文件。這種格式容易理解、易于擴展并且完全受 Microsoft 支持。MSBuild 項目文件的格式使開發(fā)人員能夠充分描述哪些項需要生成,以及如何利用不同的平臺和配置生成這些項。另外,項目文件的格式還使開發(fā)人員能夠創(chuàng)作可重用的生成規(guī)則,這些規(guī)則可以分解到不同的文件中,以便可以在產(chǎn)品內(nèi)的不同項目之間一致地執(zhí)行生成。
當(dāng)時ASP.NET Core的第一個版本為了使開源平臺對開發(fā)者更具吸引力,ASP.NET Core采用了一種基于JSON的項目系統(tǒng)project.json文件定義,這是一種與Node.js類似的定義,這對于吸引Web開發(fā)者來說是個明智的選擇。但是隨著.NET Core的整體開源,非Web開發(fā)者如UWP和Xamarin,對這種JSON項目結(jié)構(gòu)并不熟悉。這些開發(fā)者和社區(qū)都希望繼續(xù)使用