C#?多項目打包時如何將項目引用轉(zhuǎn)為包依賴(最新推薦)
項目背景
最近開發(fā)一組類庫,大約會有五六個項目。一個Core,加上若干面向不同產(chǎn)品的實現(xiàn)庫,A/B/C/D...它們都依賴Core.
首先,我想統(tǒng)一版本號,這個容易,通過Directory.Build.props設置。
其次,每個庫要單獨發(fā)包。
問題是在開發(fā)階段,子項目都是通過項目引用Core的,便于調(diào)試,怎么實現(xiàn)在打包時自動加上對Core包的依賴?
經(jīng)過試驗,可以總結(jié)三種方法:
一、生成時將 ProjectReference 轉(zhuǎn)為 NuGet 依賴項 (Not Work)
這個DeepSeek推薦的方案,但很遺憾,我沒試驗成功。
它的項目結(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前將項目引用強制轉(zhuǎn)換在包引用。
我也問了Github Copilot,它也說行,but...請有經(jīng)驗的園友不吝賜教。
二、按條件引用
項目結(jié)構(gòu):
<ItemGroup> <!-- 開發(fā)時使用 ProjectReference --> <ProjectReference Include="..\Core\MyProject.Core.csproj" Condition="'$(IsPackaging)' != 'true'" /> <!-- 打包時使用 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文件里塞。)
項目結(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.
驗證可行。
到此這篇關于C# 多項目打包時如何將項目引用轉(zhuǎn)為包依賴的文章就介紹到這了,更多相關C# 多項目打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Unity的IPreprocessBuild實用案例深入解析
這篇文章主要為大家介紹了Unity的IPreprocessBuild實用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05