Nuget一键打包上传以及高级应用
Nuget是什么不用多说,大家应该也没少用过Nuget, 不少人也应该使用过工具打Nuget包,接下来先一步步说明如何使用脚本完成Nuget一键打包
Nuget一键打包
配置Nuget环境
- 下载地址:https://www.nuget.org/downloads
- 下载后可以直接放在System32文件夹下,之后便可以直接打开CMD,调用nuget指令,
调用如下图,说明已经配置好
生成Nuget包必须包含的Nuspec文件
nuget spec ConsoleApp1
生成的nuspec文件如下,其中ConsoleApp1这个Id表示Nuget Package的唯一标识
下图是我本地文件夹包含的文件
有些文件其实并不是我们想要打进nuget包里的,这时候我们可以编辑Nuspec文件,指定要包含的文件
可以参考官方文档
nuspec文件描述:https://docs.microsoft.com/zh-cn/nuget/reference/nuspec
nuget package文件目录:https://docs.microsoft.com/zh-cn/nuget/create-packages/creating-a-package#from-a-convention-based-working-directory 文中写明了Nuget安装是对不同的文件夹会有不同的操作
Nuget生成package
nuget pack ConsoleApp1.nuspec -Version 1.0.0.0
生成对应的package文件 ConsoleApp1.1.0.0.0.nupkg
大家可以直接将nupkg文件解压缩,看看里面具体的文件目录
Nuget上传
nuget push ConsoleApp1.*.nupkg -Source YourSourceUrl -ApiKey YourApiKey
其中:
- YourSourceUrl 指nuget服务器地址
- YourApiKey 指通过服务器校验的密钥
Nuget包删除
nuget delete ConsoleApp1 1.0.0.0 -Source YourSourceUrl -ApiKey YourApiKey
完整的Nuget一键打包流程
现在软件开发离不开代码版本管理,所以nuget一键打包也需要和代码版本管理结合,这里以git管理举例
@echo off
set AssemblyName=ConsoleApp1
set ApiKey=YourApiKey
set SourceUrl=YourSourceUrl
echo git tag (需要手动输入tag版本号以及注释)
set /p version=请输入版本号(Tag名):
set /p comment=请输入注释(Tag注释):
echo git tag -a "%version%" -m "%comment%"
git tag -a "%version%" -m "%comment%"
git push origin "%version%"
if %errorlevel% NEQ 0 exit
nuget pack %AssemblyName%.nuspec -Version %version%
nuget push %AssemblyName%.*.nupkg -Source %SourceUrl% -ApiKey %ApiKey%
del %AssemblyName%.*.nupkg /F /Q
pause
上述流程介绍了一个比较简单的打包流程,Nuget Package也是相对简单,但是往往实际情况要复杂的多。
现在问题来了,众所周知,.NET可以调用C++的dll(实际上.NET的底层都是调用WindowsApi),当你的动态链接库依赖一个或一组C++的dll的时候怎么办?如何让别人在引用你的动态链接库的时候,只需要Nuget安装一下就行?
方法一:使用Nuget Package中的ContentFiles文件夹
ContentFiles文件夹在安装的时候没有任何行为
如何放入ContentFiles文件夹中
编辑Nuspec文件,在Files节点中指定
如何将ContentFiles中的文件输出到编译输出目录呢
可以自行添加编译后指令将文件复制到输出目录中,以达到使用的目的
但是很显然,此方法并不是很完美,难道每个引用该package的人都要写一遍指令来复制文件吗?
方法二:使用Nuget Package中的Content文件夹
Content文件夹对应的行为是内容复制到项目根目录。 将“内容”文件夹视为最终使用包的目标应用程序的根目录
用更直白的话语解释一下:放在content文件夹的内容在安装的时候,就像你手动在项目中添加文件一样
如何放入Content文件夹
同ContentFiles一样,这里就不再赘述
如何将Content中的文件输出到编译输出目录呢
- 同ContentFiles一样写指令复制文件
- 因Content的文件会被引入到项目中,可以设置文件的属性,修改输出的行为,但是每次已更新就得重新设置
这种方法也不是很完美
方法三:使用Nuget Package中的Build文件夹+自定义的Targets文件
Nuget安装的时候将Build目录中的targets文件自动插入到项目中
如何放入Build文件夹中
下图是我的文件夹目录
其中components文件夹中包含了一组ConsoleApp1.dll依赖的C++组件
nuspec文件如下图
targets文件如下
最终打出来的包目录如下
这种方法只需要使用者直接引用nuget package即可,其他的均无需考虑,不管是依赖的是一个还是一组C++组件,不管是在根目录下还是包含子目录,都可以解决上面提到的问题。
实现的原理:nuget在安装package的时候,将Build目录中的targets文件直接导入到对应的project文件中,MSBuild执行的时候会将对应的文件输出到输出目录
这里重点提到一点便是
这个targets文件的名称必须在当前package的Id一样(非常重要)本文中都是ConsoleApp1
以上代码均为原创分享,若大家认为有不妥的地方,烦请留言指出,在下感激不尽
本文作者:hexuwsbg
出处:https://www.cnblogs.com/hexu0512/p/12880526.html
版权:本文采用「可附带出处转载」知识共享许可协议进行许可
Nuget一键打包上传以及高级应用的更多相关文章
- 【NuGet】打包上传一条龙服务
昨天写了搭建自己的NuGet程序源,但是领导不满意之前的打包上传~~,无奈只能去爬点思路了,这里参考的其他博文,但是还是想写下来. 第一步.建立一个批处理文件 在文件里,有三条命令: nuget pa ...
- Nuget多项目批量打包上传服务器的简明教程
本篇不会介绍Nuget是什么,如何打包上传Nuget包,怎么搭建私有Nuget服务器.这些问题园子里都有相应的文章分享,这里不做过多阐述.另外本文假设你已经下载了Nuget.exe,并且已经设置好了环 ...
- Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2、PGP下载安装与密钥生成发布
文章目录: Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):1.JIRA账号注册 Taurus.MVC-Java 版本打包上传到Maven中央仓库(详细过程):2.PGP ...
- 打包上传成功, itunes connect 不出现上传的版本
由于有一次感觉build setting 里 code signing identity设置证书有点乱,有些已经用不到了,就想把那些删除 于是我找到了所有证书的那个文件夹(进入所有证书的那个文件夹), ...
- XCode7,打包上传的一些警告,及参考处理方法
1.ERROR ITMS-90046 /90085: "Invalid Code Signing Entitlements. Your application bundle's signat ...
- iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b
用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 ...
- Maven配置jar(war)包自动打包上传Maven服务器的配置
Maven配置jar(war)包自动打包上传Maven服务器的配置 创建jar(war)包工程 创建一个maven工程 在工程中穿件一个测试类 配置pom.xml <distributionMa ...
- iOS 打包上传AppStore相关(3)-iTunes相应配置以及使用蒲公英网站进行应用托管分发(链接/二维码)
上一篇讲到我们最终生成了一个格式为 .xcarchive 的文件(可以右键并Show in Finder)查看.本篇我们就进行最后的设置,打包上传.另外,还有一个小福利,那就是打测试包分发链接测试. ...
- iOS 打包上传AppStore相关(2)-Xcode相应配置
上一篇描述了如何在AppleDeveloper创建Certificates.App IDs和Provisioning Profiles的过程.本篇将详细描述在Xcode部分我们需要做的配置. 1.配置 ...
随机推荐
- .NET Core 3 WPF MVVM框架 Prism系列文章索引
.NET Core 3 WPF MVVM框架 Prism系列之数据绑定 .NET Core 3 WPF MVVM框架 Prism系列之命令 .NET Core 3 WPF MVVM框架 Prism系列 ...
- json格式的相互转化
直接上代码: header("Content-type: text/html; charset=utf-8"); $arr = array(); $arr = [ ', ', ' ...
- linux--配置开发环境 --Apache篇
现在我的的linux服务器上一般都是使用:Apache 和 Nginx 这两种配置. 你现在安装好了,启动了,也无法通过你服务器绑定的网址访问你的网站. 这是你可以通过这个命令查看一下你的80端口: ...
- Linux查看端口或pid使用路径
1. lsof -i:10010 查看10010端口的占用情况 命令返回结果: 2. netstat -lpn | grep 80 查看80端口服务端socket占用状况 3. ll /proc/26 ...
- webug3.0靶场渗透基础Day_2(完)
第八关: 管理员每天晚上十点上线 这题我没看懂什么意思,网上搜索到就是用bp生成一个poc让管理员点击,最简单的CSRF,这里就不多讲了,网上的教程很多. 第九关: 能不能从我到百度那边去? 构造下面 ...
- Nodejs的介绍
Nodejs的介绍 Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台.Node.js使用事件驱动,非阻塞I/O模型,轻量.高效,可以完美 ...
- 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...
本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...
- 手把手教你用Node.js爬虫爬取网站数据
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度 ...
- nat和静态映射
拓扑图: 实验要求: 1.R2.R3能访问外网的4.4.4.4(4.4.4.4为R4上的环回接口,用来模拟inter网). 2.R4访问222.222.222.100其实访问到的是内网的192.168 ...
- HR问了我朋友什么是简单工厂模式,竟被质疑是否学过设计模式,是否是计算机专业?
越是简单的东西,越是容易被忽略,我来带你们好复习一下! 简单工厂模式 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要 ...