登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
C# 多项目打包时如何将项目引用转为包依赖 ...
C# 多项目打包时如何将项目引用转为包依赖
[ 复制链接 ]
揉幽递
2025-6-2 00:40:17
项目背景
最近开发一组类库,大约会有五六个项目。一个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 Include="..\Core\MyProject.Core.csproj"
Condition="'$(IsPackaging)' != 'true'" />
<PackageReference Include="MyProject.Core"
Version="$(PackageVersion)"
Condition="'$(IsPackaging)' == 'true'" />
</ItemGroup>
复制代码
然后使用命令生成:
dotnet pack -p:IsPackaging=true
复制代码
此法可行。
三、指定.nuspec文件
最后,我又想到了用传统的.nuspec文件。(我很喜欢以前的包管理方式,packages.config/nuspec,不理解为什么MS非要把所有的东西都往project文件里塞。)
项目结构:
My.nuspec<ItemGroup>
<ProjectReference Include="..\Core\MyProject.Core.csproj"
Condition="'$(IsPackaging)' != 'true'" />
<PackageReference Include="MyProject.Core"
Version="$(PackageVersion)"
Condition="'$(IsPackaging)' == 'true'" />
</ItemGroup>$(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)
复制代码
它将Directory.Build.props中定义的属性一一赋给nuspec.
验证可行。
<ItemGroup>
<
rojectReference Include="..\Core\MyProject.Core.csproj"
Condition="'$(IsPackaging)' != 'true'" />
<
ackageReference Include="MyProject.Core"
Version="$(PackageVersion)"
Condition="'$(IsPackaging)' == 'true'" />
</ItemGroup>出处:http://www.cnblogs.com/cnsharp/<ItemGroup>
<
rojectReference Include="..\Core\MyProject.Core.csproj"
Condition="'$(IsPackaging)' != 'true'" />
<
ackageReference Include="MyProject.Core"
Version="$(PackageVersion)"
Condition="'$(IsPackaging)' == 'true'" />
</ItemGroup>本文版权归CnSharp.com和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
项目
打包
如何
引用
转为
相关帖子
浅谈如何更好的进行需求评审
【经验贴】多项目并行,如何解决资源管理这个难点?
【玩转鲲鹏DevKit系列】如何快速迁移软件包?
【记录贴】使用项目管理软件管理大型复杂项目是种什么体验?
【吐槽贴】项目居然因为采购管理失控被迫暂停了?
如何把一个接口设计好?
项目开展CICD的实践探路
生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目
学信息系统项目管理师第4版系列26_项目绩效域(下)
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
浅谈如何更好的进行需求评审
1
277
边书仪
2025-10-10
安全
【经验贴】多项目并行,如何解决资源管理这个难点?
0
717
拼匍弦
2025-10-10
安全
【玩转鲲鹏DevKit系列】如何快速迁移软件包?
0
133
左优扬
2025-10-10
安全
【记录贴】使用项目管理软件管理大型复杂项目是种什么体验?
0
966
奄幂牛
2025-10-10
安全
【吐槽贴】项目居然因为采购管理失控被迫暂停了?
0
793
红弘丽
2025-10-10
安全
如何把一个接口设计好?
0
370
戎玉珂
2025-10-10
安全
项目开展CICD的实践探路
0
416
溶绚
2025-10-10
代码
生成项目框架、生成JavaBean、生成数据库文档、自动化部署项目
0
364
汹萃热
2025-10-11
安全
学信息系统项目管理师第4版系列26_项目绩效域(下)
0
509
剽达崖
2025-10-11
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
代码
安全
签约作者
程序园优秀签约作者
发帖
揉幽递
2025-6-2 00:40:17
关注
0
粉丝关注
20
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994888
dage888
999994
富账慕
10007
4
柴古香
9995
5
匝抽
9986
6
筒濂
9983
7
孙淼淼
9992
8
凌彦慧
9985
9
崔瑜然
9984
10
慢秤
9979
查看更多