如何使用 azure devops 和 nuget 打包和发布多项目解决方案模板?

问题描述 投票:0回答:1

我有什么

我希望在每个新的绿地申请中看到三个项目:

项目 类型 注释
我的模板.API 网络API 与外部消费者的沟通
我的模板.持久化 EF数据库 通过 EF Core 8 访问数据库
我的模板.域 型号 所有领域模型的集合

我创建了一个新的解决方案,其中除了一些文件夹和示例文件之外,还以虚拟状态添加了这 3 个项目(类似于通过 Web API 获取的 WeatherForeCast 信息)。

在 Visual Studio 中使用

Project > Export Template
对于每个项目,我都会获得 zip 文件的集合。

我将它们移出输出位置并添加通用

.vstemplate
文件(包括图标):

<VSTemplate Version="3.0.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
    <TemplateData>
        <Name>My Solution Template</Name>
        <Description>A solution template for custom application</Description>
        <ProjectType>CSharp</ProjectType>
        <ProjectSubType>
        </ProjectSubType>
        <SortOrder>1000</SortOrder>
        <CreateNewFolder>true</CreateNewFolder>
        <DefaultName>My Solution</DefaultName>
        <ProvideDefaultName>true</ProvideDefaultName>
        <LocationField>Enabled</LocationField>
        <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
        <Icon>myIcon.png</Icon>
    </TemplateData>
    <TemplateContent>
        <ProjectCollection>
            <ProjectTemplateLink ProjectName="$projectname$.API">
                MyTemplate.API\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$projectname$.Persistence">
                MyTemplate.Persistence\MyTemplate.vstemplate
            </ProjectTemplateLink>
            <ProjectTemplateLink ProjectName="$projectname$.Domain">
                MyTemplate.Domain\MyTemplate.vstemplate
            </ProjectTemplateLink>
        </ProjectCollection>
    </TemplateContent>
</VSTemplate>

接下来我执行以下步骤

  1. 我提取导出模板步骤生成的 zip 文件
  2. 删除 zip 文件(在我的临时文件夹中)
  3. 我确保图标和
    .vstemplate
    文件在那里
  4. 我选择全部并将其复制到本地系统上相应的模板文件夹中

本地模板文件夹对应:

%userprofile%\Documents\Visual Studio 2022\Templates\ProjectTemplates

如果我随后启动 Visual Studio 并选择“创建新项目”,我可以选择我的解决方案模板,一切似乎都已就位。

到目前为止一切顺利。

下一步是什么?

我想使用我已有的 Azure DevOps 管道来自动化这个相对费力的过程。我还没有找到有关如何打包和发布完整解决方案模板的信息。正如题主所说..

如何使用以下方式打包和发布多项目解决方案模板 azure devops 和 nuget?

我不知道要寻找什么,我发现提到了打包单个项目,但没有提到多项目解决方案,所以我不知道该去哪里寻找。

任何提示表示赞赏。

c# .net-core azure-devops nuget visual-studio-2022
1个回答
0
投票

1.准备您的解决方案模板

您已经为整个解决方案和各个项目创建了

.vstemplate
。确保它们与必要的项目文件和目录一起包含在您的源代码管理中。

2.为模板创建 NuGet 包

您需要创建一个包含解决方案模板的 NuGet 包。这通常是通过创建一个

.nuspec
文件来完成的,该文件指定要包含在 NuGet 包中的文件。

  1. 在解决方案的根目录下创建一个
    .nuspec
    文件
    。这是该文件的示例(这只是一个演示,只是让您知道如何使用文件选择):
<?xml version="1.0"?>
<package >
  <metadata>
    <id>MySolutionTemplate</id>
    <version>1.0.0</version>
    <authors>YourName</authors>
    <description>Template for My Solution with API, Persistence, and Domain projects.</description>
  </metadata>
  <files>
    <file src="MyTemplate.API\**\*.*" target="content\MyTemplate.API" />
    <file src="MyTemplate.Persistence\**\*.*" target="content\MyTemplate.Persistence" />
    <file src="MyTemplate.Domain\**\*.*" target="content\MyTemplate.Domain" />
    <file src="*.vstemplate" target="content" />
  </files>
</package>

3.设置 Azure DevOps 管道

在 Azure DevOps 中创建 YAML 管道,以自动构建、打包和发布解决方案模板。

  1. 创建新的 YAML 构建管道:

    • 转到 Azure DevOps 中的管道,然后选择“新建管道”。
    • 选择代码的托管位置(例如 Azure Repos Git)。
    • 选择包含解决方案模板的存储库和分支。
  2. 在 YAML 文件中定义步骤。这是一个管道配置示例(这也是一个演示,您这边可能有点不同):

    trigger:
      branches:
        include:
        - main
    
    pool:
      vmImage: 'windows-latest'
    
    steps:
    - task: NuGetToolInstaller@1
    
    - task: NuGetCommand@2
      inputs:
        command: 'restore'
        restoreSolution: '**/*.sln'
    
    - task: MSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArguments: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    
    - task: NuGetCommand@2
      inputs:
        command: 'pack'
        packagesToPack: '**/*.nuspec'
        packDestination: '$(Build.ArtifactStagingDirectory)'
    
    - task: NuGetCommand@2
      inputs:
        command: 'push'
        packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
        nuGetFeedType: 'internal'
        publishVstsFeed: 'YourFeedId'
    

    此管道安装 NuGet、恢复依赖项、构建解决方案、使用

    .nuspec
    文件将模板打包到 NuGet 包中,然后将其推送到 Azure Artifacts 源。

4.运行管道

配置管道后,提交更改以触发构建(或从 Azure DevOps 手动运行)。检查管道日志以确保每个步骤成功完成并且您的包已推送到 NuGet feed。

5.使用 NuGet 中的模板

将包发布到 NuGet 源后,您可以在 Visual Studio 中或通过

dotnet new
命令安装和使用该模板,具体取决于您的设置和首选项。确保配置您的 NuGet 源以包含您的 Azure Artifacts feed。

为了让大家更清楚的了解,这里分享一些相关的官方文档给大家:

Nuspec 参考

dotnet new 的自定义模板

创建您的第一个管道 - Azure Pipeline

使用 Azure Pipelines(YAML/经典)发布 NuGet 包

© www.soinside.com 2019 - 2024. All rights reserved.