Hello 你们好,我是TANZAME,咱们又见面了。git
NuGet 是什么这里就再也不重复啰嗦,园子里一搜一大把。今天要跟你们分享的是,在平常开发过程当中如何统一管理咱们的包,如何经过批处理脚本生成包并自动上传到 NuGet。在实际项目开发过程当中咱们要上传本身的包,通常的步骤都是:nuget spec => nuget pack => nuget push,一个包都要至少重复三个动做,若是有 N 个包那就要重复 N*3 次,想一想都不能忍,因此便有了今天的分享主题。github
既然是统一管理,生成的包天然是放在同一个文件夹,而不是分散在各个 .proj 目录里。这里咱们在解决方案所在目录新建一个目录,这样作的目的是方便 bat 脚本找到解决方案下面的子项目。好比我这里新建的是 .nuget 这个目录,须要注意的是若是目录名称有特殊字符的话不能直接右键新建,须要用命令提示符,直接在解决方案所在目录使用快捷键 SHIFT + 右键 就能直接打开命令提示符,这样能够省去一大堆 cd 的操做。express
到 NuGet 官网下载命令行接口(CLI)。nuget.exe
提供了完整的 nuget 功能, 可用于安装、建立、发布和管理包, 而无需对项目文件进行任何更改。json
nuget.exe
文件。 让浏览器将文件保存到选定文件夹。 此文件不 是安装程序;若是直接在浏览器中运行,就不会看到任何内容。nuget.exe
中放置 PATH 环境变量的位置,这样就能够从任意位置使用 CLI 工具。这里咱们把它放在上一步新建的 .nuget 文件夹下面,并设置 PATH 环境变量。
.nuspec文件是包含包元数据的 XML 清单, 此清单同时用于生成包以及为使用者提供信息。这个清单文件咱们只须要生成一次,之后都不须要再从新生成。 .net Core 和使用sdk 特性.NET Standard 项目不须要 .nuspec 文件,若是是.net Core 和使用sdk 特性.NET Standard 项目则忽略此步骤。转到项目所在目录,SHIFT + 右键 调出命令提示符,输入 nuget spec 命令便可生成咱们所须要的包元数据清单。api
将这个清单文件剪切到第一步新建的 .nuget 文件夹,剪切过去后项目下面就不会凭空多出一个文件,看着清爽多了。而后作一下调整填入咱们本身项目的相关信息, 好比像下面这样:浏览器
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd"> <metadata> <id>TZM.XFramework</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <license type="expression">Apache-2.0</license> <projectUrl>https://github.com/TANZAME/TZM.XFramework</projectUrl> <iconUrl>http://go.microsoft.com/fwlink/?LinkID=386613</iconUrl> <description>TZM.XFramework is a lightweight and high performance object-relational mapper for .NET use the original Entity Framework api.</description> <copyright>Copyright 2019</copyright> <tags>.NET SqlServer MSSQL Database Data O/RM ADO.NET</tags> <repository type="git" url="https://github.com/TANZAME/TZM.XFramework" /> <dependencies /> <frameworkAssemblies> <frameworkAssembly assemblyName="System.Data"/> <frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations"/> <frameworkAssembly assemblyName="System.Net.Http"/> </frameworkAssemblies> </metadata> </package>
在第一步新建的文件夹里新建一个 bat 文件,重命名为 package.bat,接下来编写咱们的自动脚本。完整 bat 脚本戳这 里,直接上代码片断。
app
@echo off set api_key=xxxxxxlef2j57rw4q26qcrvycvznyvcurgfxbzxxxxxxxx set source_api_uri=https://api.nuget.org/v3/index.json set startup_dir=%~dp0 cd ..\ set startup_dir=%cd% cd .nuget :: 打包 TZM.XFramework -Build echo pack TZM.XFramework copy TZM.XFramework.nuspec %startup_dir%\net45\TZM.XFramework nuget pack %startup_dir%\net45\TZM.XFramework\TZM.XFramework.csproj -Properties Configuration=Release del %startup_dir%\net45\TZM.XFramework\TZM.XFramework.nuspec echo= :: 打包 TZM.XFrameworkCore echo pack TZM.XFrameworkCore dotnet pack --no-build --configuration Release --output %startup_dir%\.nuget\ %startup_dir%\netcore\TZM.XFrameworkCore\TZM.XFrameworkCore.csproj :: 批量推送包 for /R %cd% %%f in (*.nupkg) do ( echo= dotnet nuget push %%f -k %api_key% -s %source_api_uri% ) echo= pause
最后贴一张最终运行的效果图:工具
经过这个脚本,咱们能够在一个文件夹里统一管理咱们的包,作到一键生成、上传同时保持项目文件的清爽,嗯简直不要太方便 ~..~ui
参考资料:https://docs.microsoft.com/zh-cn/nuget/url
技术交流群:816425449