我按照本博文中所述的步骤进行操作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>
中的值都没有帮助。
您可以重命名 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>