Roslyn 使用 Directory.Build.props 管理多個(gè)項(xiàng)目配置

在一些大項(xiàng)目需要很多獨(dú)立的倉(cāng)庫(kù)來(lái)做,每個(gè)倉(cāng)庫(kù)之間都會(huì)有很多相同的配置,本文告訴大家如何通過(guò) Directory.Build.props 管理多個(gè)項(xiàng)目配置
在我的 MVVM 框架需要三個(gè)不同的庫(kù),一個(gè)是 Framework 另外兩個(gè)是 WPF 和 UWP 這三個(gè)庫(kù)有很多重復(fù)的配置,如版本號(hào)和作者信息。
在之前,我每次發(fā)布的時(shí)候,我都需要修改三個(gè)不同的倉(cāng)庫(kù)的版本號(hào),將幾個(gè)版本號(hào)升級(jí)到最新,但是這個(gè)方法如大家所見(jiàn),效率是很低的。
在我的另外的博客 Roslyn 通過(guò) Nuget 管理公司配置 和 Roslyn 通過(guò) nuget 統(tǒng)一管理信息 介紹了統(tǒng)一管理配置的優(yōu)點(diǎn)。
但是很顯然,我暫時(shí)無(wú)法使用 nuget 的方法統(tǒng)一幾個(gè)倉(cāng)庫(kù)的配置,我需要一個(gè)新的方式。
在看到我之前的博客 Roslyn 使用 Directory.Build.props 文件定義編譯 可以知道,通過(guò) Directory.Build.props 文件可以修改配置。
于是本渣就使用這個(gè)方法統(tǒng)一配置,我在項(xiàng)目的最外面添加了 Directory.Build.props 文件

我創(chuàng)建了 Build 文件夾,這個(gè)文件夾里面就放一個(gè)文件,這個(gè)文件就是管理版本號(hào)
Build\Version.props
<Project>
<PropertyGroup>
<Version>2.1.156</Version>
</PropertyGroup>
</Project>
現(xiàn)在的問(wèn)題是如何讓 Framework 三個(gè)不同的倉(cāng)庫(kù)引用這個(gè)文件,使用這個(gè)文件的版本號(hào)
通過(guò) Directory.Build.props 添加下面的代碼就可以讓 Framework 項(xiàng)目找到版本號(hào)
<Project>
<Import Project="build\Version.props" />
</Project>
這樣就可以導(dǎo)入版本號(hào)文件,也就是可以讓 Framework 等項(xiàng)目引用這個(gè)文件
除了版本號(hào)也有很多的信息可以通過(guò)這個(gè)方式配置,如設(shè)置作者信息,作者的信息是屬性需要使用下面代碼
<Project>
<Import Project="build\Version.props" />
<PropertyGroup>
<Authors>lindexi</Authors>
</PropertyGroup>
</Project>
除了作者還有很多相同的信息,如倉(cāng)庫(kù)的路徑,下面我就直接將所有可以用到的屬性寫出來(lái),這樣大家可以復(fù)制下面的代碼到自己的 Directory.Build.props 通過(guò)修改信息定義自己的配置
<Project>
<Import Project="build\Version.props" />
<PropertyGroup>
<OutputPath>$(MSBuildThisFileDirectory)bin\$(Configuration)</OutputPath>
<!-- 打包的文件夾 -->
<PackageOutputPath>$(OutputPath)</PackageOutputPath>
<!-- 是否包括符號(hào),默認(rèn)為 false 設(shè)置為 true 會(huì)創(chuàng)建 xx.symbols.nupkg 文件 -->
<IncludeSymbols>true</IncludeSymbols>
<!-- 作者名 -->
<Authors>lindexi</Authors>
<!-- 是否在每次重新編譯的時(shí)候創(chuàng)建 nuget 包 -->
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<!-- 在 nuget 設(shè)置的項(xiàng)目的 url 通過(guò)這個(gè) url 可以在 nuget.org 看到項(xiàng)目主頁(yè) -->
<PackageProjectUrl>https://github.com/lindexi/UWP/tree/master/uwp/src/Framework</PackageProjectUrl>
<!-- 在 nuget 設(shè)置項(xiàng)目的倉(cāng)庫(kù),通過(guò)這個(gè) url 可以點(diǎn)擊到源代碼 -->
<RepositoryUrl>https://github.com/lindexi/UWP/tree/master/uwp/src/Framework</RepositoryUrl>
<!-- 版權(quán),很多時(shí)候都是寫 Copyright ? 2018 公司, All Rights Reserved. -->
<Copyright>MIT</Copyright>
<!-- 讓用戶安裝的時(shí)候看到的版權(quán)鏈接 -->
<PackageLicenseUrl>https://github.com/lindexi/UWP/blob/master/LICENSE</PackageLicenseUrl>
<!-- 在 nuget 設(shè)置標(biāo)簽 -->
<PackageTags>WPF;MVVM;UWP</PackageTags>
</PropertyGroup>
<ItemGroup>
<!--指定自己的在安裝 nuget 時(shí)修改編譯-->
<!-- 添加的 README 文件 -->
<None Include="$(MSBuildThisFileDirectory)README.md" Pack="True" PackagePath="" Visible="false"/>
</ItemGroup>
</Project>
上面的代碼的 $(MSBuildThisFileDirectory) 就是替換文件所在的文件夾路徑,更多請(qǐng)看 項(xiàng)目文件中的已知屬性(知道了這些,就不會(huì)隨便在 csproj 中寫死常量啦) - walterlv:https://blog.walterlv.com/post/known-properties-in-csproj.html
更多關(guān)于 Roslyn 請(qǐng)看 手把手教你寫 Roslyn 修改編譯 : https://blog.lindexi.com/post/roslyn.html
參見(jiàn):Roslyn 入門 - CSDN博客
【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程 ★★★
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開(kāi)篇及總體規(guī)劃
【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了
10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼
用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度
現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
