登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
C# 多项目打包时如何将项目引用转为包依赖 ...
C# 多项目打包时如何将项目引用转为包依赖
[ 复制链接 ]
揉幽递
2025-6-2 00:40:17
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
项目背景
最近开发一组类库,大约会有五六个项目。一个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和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
项目
打包
如何
引用
转为
相关帖子
2026年成都品牌主,如何选择AI优化搜索(AI GEO)合作伙伴,附压箱底选购技巧
企业数字化转型如何破局?看这三大招
Open-AutoGLM项目衍生自研app测试思路
如何使用DashVector的多向量检索
VonaJS是如何做到文件级别精确HMR(热更新)的?
Flink源码阅读:如何生成StreamGraph
Python - UV 为每个项目创建独立、干净的Python工作空间
人工智能如何改变 Anthropic 的工作方式
使用DNGuard加密并打包C# .NET Core程序为单一EXE文件
从项目成果到职业晋升:项目经理年终总结的高效撰写法
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
科技
2026年成都品牌主,如何选择AI优化搜索(AI GEO)合作伙伴,附压箱底选购技巧
0
965
百谖夷
2025-12-15
安全
企业数字化转型如何破局?看这三大招
0
81
滑清怡
2025-12-16
安全
Open-AutoGLM项目衍生自研app测试思路
1
971
施婉秀
2025-12-16
业界
如何使用DashVector的多向量检索
0
260
别萧玉
2025-12-16
业界
VonaJS是如何做到文件级别精确HMR(热更新)的?
0
411
济曝喊
2025-12-17
业界
Flink源码阅读:如何生成StreamGraph
0
346
梁丘艷蕙
2025-12-18
业界
Python - UV 为每个项目创建独立、干净的Python工作空间
0
810
匝抽
2025-12-18
安全
人工智能如何改变 Anthropic 的工作方式
0
210
诀锺
2025-12-18
安全
使用DNGuard加密并打包C# .NET Core程序为单一EXE文件
1
738
嫁吱裨
2025-12-19
安全
从项目成果到职业晋升:项目经理年终总结的高效撰写法
0
751
栓汨渎
2025-12-19
回复
(2)
列蜜瘘
2025-11-26 19:32:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
袁可佳
6 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
揉幽递
6 天前
关注
0
粉丝关注
21
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994891
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9982
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
128
嵌入式UI框架-抗锯齿画圆弧算法
927
嵌入式UI框架的渐变原理、渐变算法
208
日本股票 API 对接实战指南(实时行情与 IP
556
解决Docker磁盘空间告急:认识并清理“悬空
389
别再只会算直线距离了!用“马氏距离”揪出
521
企业进行信息化后,一定会提高效率吗?真相
509
n8n整合ffmpeg
488
从random随机数看验证码重复数字
522
OceanBase 向量索引优化指南
231
Vue2中能否实现输入中文自动转化为拼音, 且
750
从项目成果到职业晋升:项目经理年终总结的
450
JS逆向-混淆加密-识别&还原-Eval&JSFuck&JS
936
2025年上海防水补漏谁家强?长三角标杆企业
608
正式接入DeepSeek-V3.2,国产AI“双剑合壁
397
守嘉陪诊师培训报名热潮引关注 独家实习机
911
顺序表实现线性结构
72
吴恩达深度学习课程四:计算机视觉 第二周
255
设计模式简述
193
vue 甘特图 vxe-gantt table 连接线的用法
607
[SDR] USRP 双通道与 MIMO 技术:手搓 1 发