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

Nuget 多项目复合打包的更多相关文章
- Nuget多项目批量打包上传服务器的简明教程
本篇不会介绍Nuget是什么,如何打包上传Nuget包,怎么搭建私有Nuget服务器.这些问题园子里都有相应的文章分享,这里不做过多阐述.另外本文假设你已经下载了Nuget.exe,并且已经设置好了环 ...
- .NET Core NuGet 多项目套餐打包的正确姿势
NuGet 默认只支持一个菜一个菜打包,不支持套餐打包.当对一个 csproj 项目进行 nuget 打包时(比如使用 dotnet pack 命令),只会将当前项目 build 出来的 dll 程序 ...
- 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传
一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...
- 搭建本地Nuget服务器并使用NuGet Package Explorer工具打包nuget包
1.什么是Nuget: 百度百科描述: Nuget是 ASP .NET Gallery 的一员.NuGet 是免费.开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库. ...
- 旧的 .NET Core 项目重新打包出现提示版本不对问题
错误提示 当电脑更新 VS2017 版本后,如果同时有新的 .NET Core SDK 更新,打开旧的项目重新打包,可能会报这样的错误 NETSDK1061: 项目是使用 Microsoft.NETC ...
- 第07讲- Android项目的打包apk
第07讲Android项目的打包apk 方法一:在工作目录bin文件夹下有一个与项目同名的apk文件 (最懒惰的方式,不推荐,不安全,不利于版本更新,只有在开发模式时使用) 方法二:使用key方式 签 ...
- vue项目 构建 打包 发布 三部曲
一.vue项目的创建 1.首先第一肯定是要有Node.js及npm这个不多说了2.安装脚手架 此时可以直接浏览-但是现在肯定有很多小白想将他发布到gitHub上并可以浏览,使用vue全家桶制作自己的博 ...
- Vue项目的打包
vue项目的打包 更改config文件夹下的index.js里的assetsPublicPath路径 将 “/” 改为 “./” build: { env: require('./prod. ...
- Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.java
Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...
随机推荐
- 银行对账单PDF一页拆分多页
一个页拆分多个页,按照流水 String bank = "{\n" + "\t\"bank\" : [\n" + "\t\t{\n ...
- Codeforces Round #809 (Div. 2) A-E
Codeforces Round #809 (Div. 2) 2022/7/19 下午VP 传送门:https://codeforces.com/contest/1706 A. Another Str ...
- 2021.06.18 思科anyconnect安全移动客户端通知
mac系统更新后,开关机后都会弹出思科anyconnect安全移动客户端通知的弹框,很烦,所以要干掉它! 打开终端,执行以下两行命令即可: cd /Library/LaunchAgents/ mv / ...
- week3题解
1.寄包柜 看到题目最容易想到开二位数组 但数据量过大,因此需要map #include <bits/stdc++.h> using namespace std; map<int,m ...
- Windows下安装mysql的操作步骤
免安装版的Mysql MySQL关是一种关系数据库管理系统,所使用的 SQL 语言是用于访问数据库的最常用的 标准化语言,其特点为体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,在 Web 应 ...
- 关于不同平台、环境下64位int型的输入输出方式(转)
C语言 64位int 定义方式: Linux: long long Windows:__int64 C语言 64位int 输出方式: Linux: "%lld" ...
- Python内置函数:enumerate
enumerate(sequence, [start=0]) enumerate单词本身翻译为列举.枚举. 官方说明: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组 ...
- D7lsu. 树题
\(\text{Solution}\) 又是一道考场想到做法写不出来的题 对于 \(\ge x\) 的数全部 \(+1\) 的操作有个很优美的大材小用的想法,那就是分段函数 于是线段树倒着维护分段函数 ...
- Javaweb学习笔记第十弹
本章存在的意义,大概就是为了回顾一下被遗忘不久的html了 HTML:超文本标记语言(不区分大小写,语法较为松散,但建议书写时规范一些) HTML标签由浏览器来解析 标签展示图片 具体详情也可以去参考 ...
- 使用Nginx实现本地目录映射
如果文件是存储在服务器的某个位置,想提供pdf.jpg.png.mp4这些文件的预览功能,可以使用Nginx做虚拟映射,防止他人知道该文件的绝对路径. 如果想预览office文件,先将office文件 ...