在构建时从 ASP.NET Core 中的代码生成 OpenAPI 规范时如何控制生成的文件名

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

我按照本博文中所述的步骤进行操作https://www.meziantou.net/generate-openapi-specation-at-build-time-from-the-code-in-asp-net-core.htm

dotnet new webapi --framework net8.0
dotnet add package Microsoft.Extensions.ApiDescription.Server
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>

    <OpenApiDocumentsDirectory>$(MSBuildProjectDirectory)</OpenApiDocumentsDirectory>
    <OpenApiGenerateDocuments>true</OpenApiGenerateDocuments>
    <OpenApiGenerateDocumentsOnBuild>true</OpenApiGenerateDocumentsOnBuild>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.3" />
    <PackageReference Include="Microsoft.Extensions.ApiDescription.Server" Version="8.0.3">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
  </ItemGroup>

</Project>

当您有多个版本时,这将生成类似

SampleWebApi.json
SampleWebApi_v2.json
的文件。

是否可以更改此行为,使其始终包含版本,或更改模板?

所以你得到

SampleWebApi_v1.json
SampleWebApi_v2.json

或者更改模板,使其成为

SampleWebApi.v1.json
SampleWebApi.v2.json

我搜索了文档但没有找到任何内容。更改

<OpenApiDocumentsDirectory>$(MSBuildProjectDirectory)</OpenApiDocumentsDirectory>
中的值都没有帮助。

asp.net-core openapi openapi-generator
1个回答
0
投票

您可以重命名 OpenApi 文件名,如下所示:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <OpenApiDocumentsDirectory>$(MSBuildProjectDirectory)</OpenApiDocumentsDirectory>
    <OpenApiGenerateDocuments>true</OpenApiGenerateDocuments>
    <OpenApiGenerateDocumentsOnBuild>true</OpenApiGenerateDocumentsOnBuild>
  </PropertyGroup>

  <ItemGroup>
    //...
  </ItemGroup>

  <!-- Custom MSBuild target to rename generated OpenAPI documents -->
  <Target Name="RenameOpenApiDocuments" AfterTargets="GenerateOpenApiDocuments">
    <!-- Get the list of generated OpenAPI files -->
    <ItemGroup>
      <GeneratedOpenApiFiles Include="$(OpenApiDocumentsDirectory)\*.json" />
    </ItemGroup>

    <!-- Rename each file to include a version suffix -->
    <Exec Command="for %%f in (@(GeneratedOpenApiFiles->'%(FullPath)')) do (if %%~nxf==SampleWebApi.json ren %%f SampleWebApi_v1.json)" />
    <Exec Command="for %%f in (@(GeneratedOpenApiFiles->'%(FullPath)')) do (if %%~nxf==SampleWebApi_v2.json ren %%f SampleWebApi_v2.json)" />
  </Target>
</Project>
© www.soinside.com 2019 - 2024. All rights reserved.