Nuget 多项目复合打包
问题描述
我这里有个进程间通信组件,用于提供多应用间通信的解决方案。
进程间通信,分为客户端和服务端,俩端肯定会有些共性代码,所以加了个H3C.Channel.Core项目
因为之前还不太了解nuget这块,然后我就踩到了坑:
引用H3C.Channel.Client包后,H3C.Channel.Core代码竟然没有默认打包到Client的Nuget包内部。
当时项目忙,没时间关注这块,就临时搞了个H3C.Channel.Core包,所以进程间通信就有三个Nuget包
但用一段时间,会发现真的烦。。。每次都要更新3个nguet包(程度员是最不喜欢重复工作量的)
今天终于有时间看这个心病。好像是可以解决的,emmm。。。我整理了下
集成多项目Nuget包-内部引用的项目
所以,集成多项目Nuget包-内部引用的项目,可以有以下几种处理:
一般都是维护内部项目H3C.Channel.Core的Nuget版本,加个nuget配置即可,如何修改csporj,可以参考:Github自动打包并推送Nuget版本 - 唐宋元明清2188 - 博客园 (cnblogs.com)不想维护内部项目H3C.Channel.Core的Nuget版本,可以设置H3C.Channel.Core项目的配置<GeneratePackageOnBuild>false</GeneratePackageOnBuild>,让H3C.Channel.Core不生成Nuget包。
设置H3C.Channel.Client项目的配置:
1 <Project Sdk="Microsoft.NET.Sdk"> 2 <PropertyGroup> 3 <TargetFrameworks>net452;</TargetFrameworks> 4 <GeneratePackageOnBuild>true</GeneratePackageOnBuild> 5 <Version>1.1.16-preview</Version> 6 <Authors>Kybs0</Authors> 7 <RepositoryUrl>http://10.214.20.41:81/windowsappgroup/WindowsComponents/H3C.Channel</RepositoryUrl> 8 <RepositoryType>git</RepositoryType> 9 <Description>进程间通信-客户端</Description> 10 <LangVersion>latest</LangVersion> 11 <Company>H3C</Company> 12 <Configurations>Debug;Release</Configurations> 13 </PropertyGroup> 14 <PropertyGroup> 15 <TargetsForTfmSpecificBuildOutput>CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput> 16 </PropertyGroup> 17 <Target Name="CopyProjectReferencesToPackage"> 18 <ItemGroup> 19 <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" /> 20 </ItemGroup> 21 </Target> 22 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> 23 <DocumentationFile>H3C.Channel.Client.xml</DocumentationFile> 24 </PropertyGroup> 25 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> 26 <DocumentationFile>H3C.Channel.Client.xml</DocumentationFile> 27 </PropertyGroup> 28 <ItemGroup> 29 <None Remove="H3C.Channel.Client.csproj.DotSettings" /> 30 </ItemGroup> 31 <ItemGroup> 32 <ProjectReference Include="..\H3C.Channel.Core\H3C.Channel.Core.csproj"> 33 <PrivateAssets>all</PrivateAssets> 34 </ProjectReference> 35 <ProjectReference Include="..\websocket-sharp\websocket-sharp.csproj"> 36 <PrivateAssets>all</PrivateAssets> 37 </ProjectReference> 38 </ItemGroup> 39 </Project>
俩个重点:
1. CopyProjectReferencesToPackage
build 出来的 dll 程序集文件打包进 nupkg 文件
这个配置决定了,外部是否可直接引用到内部项目中的类文件。
2.PrivateAssets- 引用所有资产文件
这个必须要的,将内部项目的源码类文件全部引用。不然最终生成的Nuget包无法安装,提示“无法解析H3C.Channel.Core”
我们尝试下,生成新的nuget看看。通过VS查看测试类ChannelDemoTest,反编译后dll的位置,是okay的:
减少打包依赖后,减少了后续的维护成本(重复工作):
引用H3C.Channel.Client后会默认引用H3C.Channel.Core包:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2016-08-28 C# DESC加密
2016-08-28 XML 序列化与反序列化
2016-08-28 AD 域账号登录
2016-08-28 WPF Telerik TreeListView样式设计
2016-08-28 WPF 提示框、确认框、确认输入框
2016-08-28 C# 记录错误日志
2016-08-28 C# 注册表Regedit读写