如何配置 NSwag.msbuild 以跨平台构建 net.core 项目工作?
How to configure NSwag.msbuild to work across platform building net.core projects?
我希望能够在我的其余客户端项目中删除 nswag.json 和 swagger.json 并自动生成 cs 代码。
此外,如果项目是最新的,请不要再次构建它。
在您的 csproj 文件中,在结束标记前添加以下代码
<PropertyGroup>
<GeneratedClientsRoot>./*/</GeneratedClientsRoot>
<GeneratedClientsWildcard>$(GeneratedClientsRoot)*.cs</GeneratedClientsWildcard>
</PropertyGroup>
<ItemGroup>
<GeneratedClients Include="$(GeneratedClientsWildCard)" />
<NSwagFiles Include="$(GeneratedClientsRoot)nswag.json" Condition="'@(GeneratedClients)' != ''" />
<SwaggerFiles Include="$(GeneratedClientsRoot)swagger.json" Condition="'@(GeneratedClients)' != ''" />
</ItemGroup>
<Target Name="ForceGenerateClients" BeforeTargets="CoreCompile" Condition="'@(GeneratedClients)' == ''">
<CallTarget Targets="GenerateClients" />
</Target>
<Target Name="AutoGenerateClients" BeforeTargets="CoreCompile" Inputs="@(NSwagFiles);@(SwaggerFiles)" Outputs="@(GeneratedClients)">
<CallTarget Targets="GenerateClients" />
</Target>
<Target Name="GenerateClients">
<Message Text="Generating swagger clients" Importance="high" />
<ItemGroup Condition="'@(NSwagFiles)' == ''">
<NSwagFiles Include="$(GeneratedClientsRoot)nswag.json" />
</ItemGroup>
<Exec Command="$(NSwagExe_Core31) run %(NSwagFiles.RelativeDir)%(NSwagFiles.Filename).json" />
<ItemGroup>
<NewClients Include="$(GeneratedClientsWildCard)" Exclude="@(GeneratedClients)" />
</ItemGroup>
<Message Text="Generated clients @(NewClients)" Importance="high" />
<ItemGroup>
<Compile Include="@(NewClients)" />
</ItemGroup>
</Target>
第一个 属性 GeneratedClientsRoot 是您的文件所在的文件夹模式。如果您为每个 nswag.json 创建一个文件夹,那么默认的“./*/”就是您所需要的。
例如,如果您希望项目根目录中的所有客户端只需将 GeneratedClientsRoot 更改为“./”
如果创建了 none 客户端,以上代码将强制生成客户端,然后将检测是否发生了对 nswag 文件的更改并相应地重新生成客户端。
--编辑 - 添加nswag.json配置示例
这是突出显示重要配置位的部分 nswag.json 配置。
{
"runtime": "NetCore31",
"defaultVariables": null,
"documentGenerator": {
"fromDocument": {
"json": "",
"url": "swagger.json",
"output": null
}
},
"codeGenerators": {
"openApiToCSharpClient": {
"className": "MyRestServiceClient",
"namespace": "RestServices.MyRestService",
"output": "MyRestServiceClient.cs"
}
}
}
输出需要与 nswag 位于同一文件夹中。理想情况下类名与文件名匹配,并且不要忘记命名空间。
-- 编辑 2 - 先决条件
为了使用它,您需要将 nugget 包 nswag.msbuild 添加到您的项目中。
将 NSwagExe_Core31 更改为 NSwagExe_Core21 或您正在使用的任何框架版本。
同时将 nswag 运行时更改为正确的运行时。
我希望能够在我的其余客户端项目中删除 nswag.json 和 swagger.json 并自动生成 cs 代码。
此外,如果项目是最新的,请不要再次构建它。
在您的 csproj 文件中,在结束标记前添加以下代码
<PropertyGroup>
<GeneratedClientsRoot>./*/</GeneratedClientsRoot>
<GeneratedClientsWildcard>$(GeneratedClientsRoot)*.cs</GeneratedClientsWildcard>
</PropertyGroup>
<ItemGroup>
<GeneratedClients Include="$(GeneratedClientsWildCard)" />
<NSwagFiles Include="$(GeneratedClientsRoot)nswag.json" Condition="'@(GeneratedClients)' != ''" />
<SwaggerFiles Include="$(GeneratedClientsRoot)swagger.json" Condition="'@(GeneratedClients)' != ''" />
</ItemGroup>
<Target Name="ForceGenerateClients" BeforeTargets="CoreCompile" Condition="'@(GeneratedClients)' == ''">
<CallTarget Targets="GenerateClients" />
</Target>
<Target Name="AutoGenerateClients" BeforeTargets="CoreCompile" Inputs="@(NSwagFiles);@(SwaggerFiles)" Outputs="@(GeneratedClients)">
<CallTarget Targets="GenerateClients" />
</Target>
<Target Name="GenerateClients">
<Message Text="Generating swagger clients" Importance="high" />
<ItemGroup Condition="'@(NSwagFiles)' == ''">
<NSwagFiles Include="$(GeneratedClientsRoot)nswag.json" />
</ItemGroup>
<Exec Command="$(NSwagExe_Core31) run %(NSwagFiles.RelativeDir)%(NSwagFiles.Filename).json" />
<ItemGroup>
<NewClients Include="$(GeneratedClientsWildCard)" Exclude="@(GeneratedClients)" />
</ItemGroup>
<Message Text="Generated clients @(NewClients)" Importance="high" />
<ItemGroup>
<Compile Include="@(NewClients)" />
</ItemGroup>
</Target>
第一个 属性 GeneratedClientsRoot 是您的文件所在的文件夹模式。如果您为每个 nswag.json 创建一个文件夹,那么默认的“./*/”就是您所需要的。
例如,如果您希望项目根目录中的所有客户端只需将 GeneratedClientsRoot 更改为“./”
如果创建了 none 客户端,以上代码将强制生成客户端,然后将检测是否发生了对 nswag 文件的更改并相应地重新生成客户端。
--编辑 - 添加nswag.json配置示例
这是突出显示重要配置位的部分 nswag.json 配置。
{
"runtime": "NetCore31",
"defaultVariables": null,
"documentGenerator": {
"fromDocument": {
"json": "",
"url": "swagger.json",
"output": null
}
},
"codeGenerators": {
"openApiToCSharpClient": {
"className": "MyRestServiceClient",
"namespace": "RestServices.MyRestService",
"output": "MyRestServiceClient.cs"
}
}
}
输出需要与 nswag 位于同一文件夹中。理想情况下类名与文件名匹配,并且不要忘记命名空间。
-- 编辑 2 - 先决条件
为了使用它,您需要将 nugget 包 nswag.msbuild 添加到您的项目中。
将 NSwagExe_Core31 更改为 NSwagExe_Core21 或您正在使用的任何框架版本。 同时将 nswag 运行时更改为正确的运行时。