如何使用Azure DevOps和NuGet打包并发布多项目解决方案模板
如何使用Azure DevOps和NuGet打包并发布多项目解决方案模板
先跟你唠唠我目前已经搞定的准备工作,然后再一步步说怎么用Azure DevOps和NuGet来完成打包发布:
我的现有项目与模板基础
我一直希望每个新的空白业务项目(greenfield application)都能自带三个核心项目,具体信息如下:
| 项目名称 | 项目类型 | 功能说明 |
|---|---|---|
| MyTemplate.API | Web API | 负责和外部消费者做通信交互 |
| MyTemplate.Persistence | EF DB | 基于EF Core 8实现数据库访问逻辑 |
| MyTemplate.Domain | Models | 存放所有领域模型的集合 |
我已经搭好了一个包含这三个项目的新解决方案,目前是初始状态——只有一些基础文件夹,还有类似Web API默认自带的WeatherForecast那种示例文件。
之后我通过Visual Studio的「项目 > 导出模板」功能,给每个项目都生成了对应的zip压缩包,把这些zip包从默认输出位置移出来后,还专门加了一个通用的.vstemplate文件(里面还包含了自定义图标),这个模板文件的开头内容是这样的:
<VSTemplate Version="3.0.0" Type="..."
用Azure DevOps + NuGet打包发布的步骤
下面就是具体的操作流程啦:
1. 准备Azure DevOps仓库与流水线
- 先把你的模板相关文件(三个项目的zip包、通用
.vstemplate文件、图标等)上传到Azure DevOps的Git仓库里,确保文件结构清晰,比如可以建个template-files文件夹统一存放这些内容。 - 打开Azure DevOps项目,新建一个经典流水线(或者用YAML流水线,看你习惯),选择对应的Git仓库作为源。
2. 配置打包任务(用NuGet打包模板)
- 在流水线里添加一个NuGet任务,选择
pack命令。 - 你需要创建一个
.nuspec文件,用来定义NuGet包的元数据(包名、版本、作者等),同时指定要包含的模板文件。比如.nuspec的核心内容大概是这样的:
<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>MyTemplate.Solution</id> <version>1.0.0</version> <authors>Your Name</authors> <description>Multi-project solution template for greenfield applications</description> <tags>dotnet-template solution-template</tags> </metadata> <files> <file src="template-files/**/*" target="content/MyTemplate" /> </files> </package>
- 在NuGet pack任务里指定这个
.nuspec文件的路径,设置好版本号(可以用变量自动递增,方便后续迭代)。
3. 发布到NuGet源(Azure Artifacts或公共NuGet)
- 如果用Azure Artifacts的私有源:添加一个NuGet任务,选择
push命令,指定Azure Artifacts的源地址,配置好服务连接(提前在Azure DevOps里创建好),然后把打包好的.nupkg文件推上去。 - 如果要发布到公共NuGet:同样用NuGet push任务,输入公共NuGet的API密钥,指定包的路径即可。
4. 测试模板使用
- 发布成功后,在本地用命令行安装模板:
dotnet new install MyTemplate.Solution::1.0.0 - 然后就可以用
dotnet new MyTemplate.Solution来创建包含那三个项目的新解决方案啦。
一些小提示
- 记得在
.vstemplate文件里正确配置好各个项目的引用关系,确保创建新解决方案时项目之间的依赖能正常识别。 - 流水线里可以添加版本号变量,每次发布时自动更新版本,避免手动修改的麻烦。
- 如果需要自定义模板的输入参数,可以在
.vstemplate里添加TemplateParameter节点,让用户创建项目时能自定义项目名等信息。
备注:内容来源于stack exchange,提问作者kbd
相关产品推荐
相关产品推荐

