Backstage(来自spotify)在从模板创建时重命名解决方案



我使用Backstage开发人员门户,让开发人员可以从C#.Net模板轻松创建新项目。我有一个名为dotnet-api-template的模板,它已经配置好了示例api、示例单元测试等。该模板有一个解决方案文件(.sln(、一个项目文件(.csproj(和一些代码文件。

当用户从此模板创建新项目时,代码文件中的解决方案名称、项目名称和命名空间保持不变(dotnetapi模板(。用户可以更改这些,但这需要一些额外的手动步骤,我希望它们能够去掉。

后台根据模板创建新项目时,有没有办法将这两个文件(.sln和.csproj(重命名为新项目名称?一定在template.yaml文件中,但我还没弄清楚是怎么回事。

此外,我想将代码文件更改为具有不同的命名空间(而不是dotnet_api_template(。这意味着更改代码文件内容的某些部分。

感谢所有的帮助。

编辑:我找到了重命名文件的方法。你可以像这样使用fs:rename步骤:

- id: rename
name: Rename solution and project files
action: fs:rename
input:
files:
- from: ./skeleton/dotnet-api-template.csproj 
to: ./skeleton/{{ parameters.component_id }}.csproj
- from: ./skeleton/dotnet-api-template.sln
to: ./skeleton/{{ parameters.component_id }}.sln

仍在研究如何更改一些文件的内容

Ok找到了答案。您需要将模板中的命名空间重命名为${{values.component_id | lower | replace('-','_'(}},并且您可以对.csproj和.sln文件使用${{values.componnent_id}。

所以你的模板会有以下文件:

${{ values.component_id }}.sln 
${{ values.component_id }}.csproj

代码看起来像这样:

using Microsoft.AspNetCore.Mvc;
using ${{ values.component_id|lower|replace('-','_') }}.Models;
namespace ${{ values.component_id|lower|replace('-','_') }}.Services
{
internal class WeatherService
{
private readonly ILogger<WeatherService> logger;
private readonly string[] weatherSummaries;
public WeatherService(ILogger<WeatherService> logger)
{
this.logger = logger;
weatherSummaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
}
public async Task<WeatherForecast[]> GetWeatherForecastAsync()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = weatherSummaries[Random.Shared.Next(weatherSummaries.Length)]
}).ToArray();
}
}
}

显然,您无法运行此代码,因此请确保首先将模板创建到您想要的程度,然后再进行上述更改。

我为Spotify Backstage找到了一个有用的插件@plusultra/plugin-scaffolder-dotnet-backend。你可以运行dotnet new来安装一个模板,然后用它创建一个项目

只需在项目文件夹的根目录中创建.template.config/template.json即可。

{
"$schema": "http://json.schemastore.org/template",
"author": "Me",
"classifications": [ "Backstage" ],
"identity": "Backstage.Project",
"name": "Backstage Project",
"shortName": "backstageproject",
"sourceName": "Backstage Project",
"preferNameDirectory": true,
"tags": {
"language": "C#",
"type": "project"
},
"sources": [
{
"modifiers": [
{
"exclude": [ ".vs/**", ".git/**" ]
}
]
}
]
}

我建议阅读微软文档中的dotnet新安装。

最新更新