C#?多項(xiàng)目打包時(shí)如何將項(xiàng)目引用轉(zhuǎn)為包依賴(最新推薦)
項(xiàng)目背景
最近開發(fā)一組類庫(kù),大約會(huì)有五六個(gè)項(xiàng)目。一個(gè)Core,加上若干面向不同產(chǎn)品的實(shí)現(xiàn)庫(kù),A/B/C/D...它們都依賴Core.
首先,我想統(tǒng)一版本號(hào),這個(gè)容易,通過Directory.Build.props設(shè)置。
其次,每個(gè)庫(kù)要單獨(dú)發(fā)包。
問題是在開發(fā)階段,子項(xiàng)目都是通過項(xiàng)目引用Core的,便于調(diào)試,怎么實(shí)現(xiàn)在打包時(shí)自動(dòng)加上對(duì)Core包的依賴?
經(jīng)過試驗(yàn),可以總結(jié)三種方法:
一、生成時(shí)將 ProjectReference 轉(zhuǎn)為 NuGet 依賴項(xiàng) (Not Work)
這個(gè)DeepSeek推薦的方案,但很遺憾,我沒試驗(yàn)成功。
它的項(xiàng)目結(jié)構(gòu)是這樣的:
<ItemGroup> <ProjectReference Include="..\Core\MyProject.Core.csproj" > <PrivateAssets>all</PrivateAssets> <Publish>true</Publish> <Version>$(PackageVersion)</Version> <PackageId>MyProject.Core</PackageId> </ProjectReference> </ItemGroup> <Target Name="ForcePackageReferenceConversion" BeforeTargets="GenerateNuspec"> <ItemGroup> <_PackageReferencesToAdd Include="@(ProjectReference->WithMetadataValue('Publish', 'true'))"> <PackageId>%(PackageId)</PackageId> <Version>%(Version)</Version> </_PackageReferencesToAdd> <PackageReference Include="@(_PackageReferencesToAdd->'%(PackageId)')" Version="%(Version)" /> </ItemGroup> </Target>
它的核心思路是生成.nuspec前將項(xiàng)目引用強(qiáng)制轉(zhuǎn)換在包引用。
我也問了Github Copilot,它也說行,but...請(qǐng)有經(jīng)驗(yàn)的園友不吝賜教。
二、按條件引用
項(xiàng)目結(jié)構(gòu):
<ItemGroup> <!-- 開發(fā)時(shí)使用 ProjectReference --> <ProjectReference Include="..\Core\MyProject.Core.csproj" Condition="'$(IsPackaging)' != 'true'" /> <!-- 打包時(shí)使用 PackageReference --> <PackageReference Include="MyProject.Core" Version="$(PackageVersion)" Condition="'$(IsPackaging)' == 'true'" /> </ItemGroup>
然后使用命令生成:
dotnet pack -p:IsPackaging=true
此法可行。
三、指定.nuspec文件
最后,我又想到了用傳統(tǒng)的.nuspec文件。(我很喜歡以前的包管理方式,packages.config/nuspec,不理解為什么MS非要把所有的東西都往project文件里塞。)
項(xiàng)目結(jié)構(gòu):
<!-- 指定自定義 nuspec 文件路徑 --> <NuspecFile>My.nuspec</NuspecFile> <!-- 傳遞 MSBuild 屬性到 nuspec 中的變量 --> <NuspecProperties>$(NuspecProperties); id=$(PackageId); version=$(Version); company=$(Company); authors=$(Authors); product=$(Product); copyright=$(Copyright); license=$(PackageLicenseExpression); projectUrl=$(PackageProjectUrl); repositoryUrl=$(RepositoryUrl); repositoryType=$(RepositoryType); icon=$(PackageIcon); config=$(Configuration) </NuspecProperties>
它將Directory.Build.props中定義的屬性一一賦給nuspec.
驗(yàn)證可行。
到此這篇關(guān)于C# 多項(xiàng)目打包時(shí)如何將項(xiàng)目引用轉(zhuǎn)為包依賴的文章就介紹到這了,更多相關(guān)C# 多項(xiàng)目打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼
本篇文章主要介紹了C# 創(chuàng)建壓縮文件的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05Unity的IPreprocessBuild實(shí)用案例深入解析
這篇文章主要為大家介紹了Unity的IPreprocessBuild實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05