Visual Studio中OpenApiReference的OutputPath含空格/相对路径失效问题
Visual Studio OpenApiReference 路径配置问题解答
你遇到的是NSwag集成到MSBuild任务时的已知参数解析缺陷,不存在遗漏的配置点,可直接提交bug报告。
根因是OpenApiReference对应的MSBuild内部逻辑调用NSwag命令行时,未对OutputPath参数做引号转义处理,导致带空格的路径被命令行拆分为多个参数,直接产生截断;同时内置逻辑对路径中的../字符做了非法校验拦截,所以相对路径跳转也无法直接实现。
以下是可直接落地的替代方案:
- 方案1:所有路径使用无空格命名,是当前最适配的兼容方案,无需额外配置
- 方案2:自定义MSBuild后置任务处理文件移动,适配带空格路径、跳出obj目录的需求,示例配置如下:
<!-- 原有OpenApiReference配置保持无空格路径正常生成 --> <ItemGroup> <OpenApiReference Include="swagger.json" CodeGenerator="NSwagCSharp" Namespace="Demo.Proxy" ClassName="ContractService" OutputPath="ConnectedServices\Backend\ContractService.cs" > <Options>/DateTimeType:DateTime /GenerateClientInterfaces:true</Options> </OpenApiReference> </ItemGroup> <!-- 新增后置任务移动生成的文件到目标路径 --> <Target Name="MoveOpenApiGeneratedProxy" AfterTargets="GenerateOpenApiClients"> <ItemGroup> <GeneratedProxyFile Include="obj\ConnectedServices\Backend\ContractService.cs" /> <!-- 目标路径支持带空格、../相对跳转等任意合法Windows路径格式 --> <TargetProxyPath Include="Connected Services\Backend\ContractService.cs" /> </ItemGroup> <Copy SourceFiles="@(GeneratedProxyFile)" DestinationFiles="@(TargetProxyPath)" OverwriteReadOnlyFiles="true" /> <Delete Files="@(GeneratedProxyFile)" /> </Target>
内容的提问来源于stack exchange,提问作者Joerg Krause
相关产品推荐
相关产品推荐

