如何从远程招摇过市Url使用msbuild生成API客户端?

如何从远程招摇过市Url使用msbuild生成API客户端?,msbuild,swagger,nswag,Msbuild,Swagger,Nswag,下面是一个示例URL: 我正在寻找解决问题的代码示例以及以下问题的行业标准答案: 如何在构建时使用MSBuild/dotnet build针对这个swagger.json端点/使用NSwag生成C#API客户端。请注意,我对将此复制为本地文件并生成它不感兴趣;我想特别指出这个端点 为什么/为什么不将生成的API客户端提交到存储库?我们是否应该让构建通过每个构建上的CI/CD构建机生成新的客户端 一般来说,针对活动端点生成API客户端是一个好主意吗?人们遇到了什么问题 关于如何生成客户端: 我知

下面是一个示例URL:

我正在寻找解决问题的代码示例以及以下问题的行业标准答案:

  • 如何在构建时使用MSBuild/
    dotnet build
    针对这个swagger.json端点/使用NSwag生成C#API客户端。请注意,我对将此复制为本地文件并生成它不感兴趣;我想特别指出这个端点
  • 为什么/为什么不将生成的API客户端提交到存储库?我们是否应该让构建通过每个构建上的CI/CD构建机生成新的客户端
  • 一般来说,针对活动端点生成API客户端是一个好主意吗?人们遇到了什么问题

关于如何生成客户端:

我知道两种方法

第一个是使用visual studio功能“连接的服务”:

右键单击一个项目->添加->连接的服务。并设置新服务(例如,请参见屏幕截图)。 我没有找到任何关于用户如何设置生成代码的文档。但你可以试试,也许这就足够你完成任务了

第二种是直接使用Nswag:

Csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NSwag.AspNetCore" Version="13.9.4" />
    <PackageReference Include="NSwag.MSBuild" Version="13.9.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <Target Name="NSwag" BeforeTargets="PrepareForBuild">

    <PropertyGroup>
      <!--You can change this if you you want keep generated code in repository-->
      <ClientFileOutDir>$(IntermediateOutputPath)</ClientFileOutDir>
      <ClientFile>$(ClientFileOutDir)/Client.cs</ClientFile>
    </PropertyGroup>

    <Exec Command="$(NSwagExe_Core31) run nswag.json /variables:OutFilename=$(ClientFile)" />

    <ItemGroup>
      <Compile Include="$(ClientFile)" />
    </ItemGroup>
  </Target>

</Project>
关于是否生成客户端和实时端点:


我认为这个问题没有行业标准。相反,您需要从任务的要求和您的便利性出发。例如,如果将来可能需要脱机构建,那么“活动端点”将不起作用。或者,如果api是不变的,并且没有更改,则每个构建的生成看起来是不必要的,可能需要生成一次客户端并将其放置在存储库中。

关于如何生成客户端:

我知道两种方法

第一个是使用visual studio功能“连接的服务”:

右键单击一个项目->添加->连接的服务。并设置新服务(例如,请参见屏幕截图)。 我没有找到任何关于用户如何设置生成代码的文档。但你可以试试,也许这就足够你完成任务了

第二种是直接使用Nswag:

Csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NSwag.AspNetCore" Version="13.9.4" />
    <PackageReference Include="NSwag.MSBuild" Version="13.9.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>

  <Target Name="NSwag" BeforeTargets="PrepareForBuild">

    <PropertyGroup>
      <!--You can change this if you you want keep generated code in repository-->
      <ClientFileOutDir>$(IntermediateOutputPath)</ClientFileOutDir>
      <ClientFile>$(ClientFileOutDir)/Client.cs</ClientFile>
    </PropertyGroup>

    <Exec Command="$(NSwagExe_Core31) run nswag.json /variables:OutFilename=$(ClientFile)" />

    <ItemGroup>
      <Compile Include="$(ClientFile)" />
    </ItemGroup>
  </Target>

</Project>
关于是否生成客户端和实时端点:

我认为这个问题没有行业标准。相反,您需要从任务的要求和您的便利性出发。例如,如果将来可能需要脱机构建,那么“活动端点”将不起作用。或者,如果api是不变的并且没有更改,那么每个构建的生成看起来是不必要的,并且可能值得生成一次客户机并将其放置在存储库中