问题描述

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

进程间通信,分为客户端和服务端,俩端肯定会有些共性代码,所以加了个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. Pytorch Cross Entropy

    Entropy Uncetainly measure of surprise higher entropy = less info \[Entropy = -\sum_i P(i)\log P(i) ...

  2. 面试题:int[] arr 和 int... arr在参数列表中是一回事儿吗?

    public class Exer { public static void main(String[] args) { Base1 b1 = new Sub1(); b1.add(1,2,3); } ...

  3. 代码还是那个代码,但我已经知道了hashmap背后的东西

    代码还是那个代码,但我已经知道了hashmap背后的东西 数据结构是链表的数组(注:后面的版本为了提升性能,已经是改成链表或者树(节点较多)了) 思想上是空间换时间的算法 构造函数上有容量和负载因子2 ...

  4. the third change day

    2022.5.9 今日名言:青春是一个短暂的美梦,当你醒来的时候,它早已消失的无影无踪.----莎士比亚 早起听了一堂听力课,感觉他教的挺好,准备跟着试试,快考试了,别来不及了. 目录 听力技巧 阅读 ...

  5. CentOS7-jdk1.8下载安装

    一.下载网址 jdk全版本:https://www.oracle.com/java/technologies/downloads/archive/ 本次安装版本(jdk1.8.0_151):https ...

  6. stm32 USART

    stm32 USART 1 USART基础知识 三种模式:轮询模式.中断模式.DMA模式 轮询模式属于阻塞模式 中断模式和DMA模式属于非阻塞模式 发送数据 接收数据 1.1 Polling mode ...

  7. 我亲自整理的Tampermonkey(以下简称tm)v4.13.6136的编辑器按键映射(基于联想笔记本键盘+win10+火狐浏览器企业版)

    警告:你可以对该随笔内容进行转载,但必须写明其来源网址,以及其作者是博客园的zqdlly,否则后果自负!不要小看了我,我一定会让你付出你应得的成本. 0. 家喻户晓的 键 原生comment myMe ...

  8. 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?

    一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware

  9. egret 图片跨域

    //图片跨域 egret.ImageLoader.crossOrigin = "anonymous";

  10. Linux shell usage()使用说明

    usage()类似于执行文件-help展示的内容,即告诉使用者有哪些参数选项可供使用. usage()格式 点击查看代码 #!/bin/bash usage() { echo "Usage: ...