问题描述

我这里有个进程间通信组件,用于提供多应用间通信的解决方案。

进程间通信,分为客户端和服务端,俩端肯定会有些共性代码,所以加了个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 多项目复合打包的更多相关文章

  1. Nuget多项目批量打包上传服务器的简明教程

    本篇不会介绍Nuget是什么,如何打包上传Nuget包,怎么搭建私有Nuget服务器.这些问题园子里都有相应的文章分享,这里不做过多阐述.另外本文假设你已经下载了Nuget.exe,并且已经设置好了环 ...

  2. .NET Core NuGet 多项目套餐打包的正确姿势

    NuGet 默认只支持一个菜一个菜打包,不支持套餐打包.当对一个 csproj 项目进行 nuget 打包时(比如使用 dotnet pack 命令),只会将当前项目 build 出来的 dll 程序 ...

  3. 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

    一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...

  4. 搭建本地Nuget服务器并使用NuGet Package Explorer工具打包nuget包

    1.什么是Nuget: 百度百科描述: Nuget是 ASP .NET Gallery 的一员.NuGet 是免费.开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库. ...

  5. 旧的 .NET Core 项目重新打包出现提示版本不对问题

    错误提示 当电脑更新 VS2017 版本后,如果同时有新的 .NET Core SDK 更新,打开旧的项目重新打包,可能会报这样的错误 NETSDK1061: 项目是使用 Microsoft.NETC ...

  6. 第07讲- Android项目的打包apk

    第07讲Android项目的打包apk 方法一:在工作目录bin文件夹下有一个与项目同名的apk文件 (最懒惰的方式,不推荐,不安全,不利于版本更新,只有在开发模式时使用) 方法二:使用key方式 签 ...

  7. vue项目 构建 打包 发布 三部曲

    一.vue项目的创建 1.首先第一肯定是要有Node.js及npm这个不多说了2.安装脚手架 此时可以直接浏览-但是现在肯定有很多小白想将他发布到gitHub上并可以浏览,使用vue全家桶制作自己的博 ...

  8. Vue项目的打包

    vue项目的打包 更改config文件夹下的index.js里的assetsPublicPath路径    将 “/”  改为  “./” build: { env: require('./prod. ...

  9. Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.java

    Maven可以使用mvn package指令对项目进行打包,如果使用Java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in ...

随机推荐

  1. ARM-linux的Windows交叉编译环境搭建

    交叉编译Arm Linux平台的QT5库 1.准备交叉编译环境 环境说明:Windows10 64位 此过程需要: (1)Qt库开源代码,我使用的是5.13.0版本: (2)Perl语言环境5.12版 ...

  2. DOS基本命令与快捷键

    DOS命令 #查看当前盘下的所有目录 dir #切换盘符 直接盘符名称: 例如切换D: #切换目录 cd 目录名称 #清屏 cls #退出 exit #创建 cd>文件名称.文件后缀 #查询电脑 ...

  3. JavaScript 函数的方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. A better jump —— 优化游戏中的跳跃

    之前一提起角色的跳跃,想当然的想法就是:给角色一个向上的初速,然后由Unity的物理系统接管就好了嘛,这样忽略空气摩擦的影响,根据重力加速度,角色向上跳到最高点的时间和由最高点落下的时间相等,不是很合 ...

  5. win10开启休眠

    powercfg /hibernate on 管理员模式下的命令提示符

  6. rsync+inotify组合实现实时同步

    首先准备两台服务器(centos7) A:192.168.75.160 B:192.168.75.161 A机器当做客户端,B机器当做服务端 rsync 安装 客户端服务器端都要安装rsync ,但是 ...

  7. 在 Sitecore 里使用 Solr 搜索 SortOrder 关联的 Item

    在 C# 使用 Solr 搜索 sitecore 的配置信息文件可直接丢进 <Instance>\App_Config 下,sitecore 会自动检测配置文件更新并加载到内存中. 通常情 ...

  8. burpsuite 设置文字大小、抓取https数据头

    设置文字大小 burpsuite安装好后,有些时候文字非常的小,看的眼睛直接痛死. 找到 User options -> Display 其中 User Interface -> Font ...

  9. 为什么 Go 语言 struct 要使用 tags

    原文链接:为什么 Go 语言 struct 要使用 tags 在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构.在 struct 中,我们可以定义多个字段,每个字段可 ...

  10. Python学习笔记--PySpark的相关基础学习(一)

    PySpark包的下载 下载PySpark第三方包: 构建PySpark的执行环境入口对象 PySpark的编程模型 数据输入 对于SparkContext对象里面的成员方法parallelize,支 ...