项目背景
最近开发一组类库,大约会有五六个项目。一个Core,加上若干面向不同产品的实现库,A/B/C/D...它们都依赖Core.
首先,我想统一版本号,这个容易,通过Directory.Build.props设置。
其次,每个库要单独发包。
问题是在开发阶段,子项目都是通过项目引用Core的,便于调试,怎么实现在打包时自动加上对Core包的依赖?
经过试验,可以总结三种方法:
一、生成时将 ProjectReference 转为 NuGet 依赖项 (Not Work)
这个DeepSeek推荐的方案,但很遗憾,我没试验成功。
它的项目结构是这样的: - <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前将项目引用强制转换在包引用。
我也问了Github Copilot,它也说行,but...请有经验的园友不吝赐教。
二、按条件引用
项目结构: - <ItemGroup>
- <!-- 开发时使用 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文件
最后,我又想到了用传统的.nuspec文件。(我很喜欢以前的包管理方式,packages.config/nuspec,不理解为什么MS非要把所有的东西都往project文件里塞。)
项目结构: - <!-- 指定自定义 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# 多项目打包时如何将项目引用转为包依赖的文章就介绍到这了,更多相关C# 多项目打包内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |