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包:

 

posted @   唐宋元明清2188  阅读(342)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 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读写
点击右上角即可分享
微信分享提示
剑桥
16:15发布
剑桥
16:15发布
7°
西南风
3级
空气质量
相对湿度
66%
今天
2°/10°
周三
2°/8°
周四
中雨
2°/7°