swagger Autorest.PowerShell:生成模块失败,因为生成了无效变量

sqserrrh  于 7个月前  发布在  Shell
关注(0)|答案(1)|浏览(60)

当我想从我的swagger生成PowerShell模块时,
我尝试运行Generate-PowerShellClient.ps1,并查看下面的日志

   BSN.IpTables.Cli   Feature/22-add-cli≡  ~1  .\Generate-PowerShellClient.ps1                                                                                                                                                                    

changed 1 package in 222ms
AutoRest code generation utility [cli version: 3.6.3; node: v18.15.0]
(C) 2018 Microsoft Corporation.
https://aka.ms/autorest
info    |    Loading AutoRest core      'C:\Users\sooro\.autorest\@[email protected]\nodemodules\@autorest\core\dist' (3.9.7)
info    |
The default version of @autorest/powershell has been bumped from 2.1+ to 3.0+.
 > If you still want to use 2.1+ version, please specify it with --use:@autorest/[email protected].{x}, e.g 2.1.401.

info    |    Loading AutoRest extension '@autorest/powershell' (4.0.648->4.0.648)
info    |    Loading AutoRest extension '@autorest/modelerfour' (~4.26.0->4.26.2)
verbose | [1.47 s] Reading OpenAPI 3.0 file file:///D:/Source/Repos/Resa/IpTables.Api/Source/BSN.IpTables.Api/swagger.json
warning | PreCheck/CheckDuplicateSchemas | Checking for duplicate schemas, this could take a (long) while.  Run with --verbose for more detail.
verbose | [1.63 s] Found and removed 0 duplicate schema
warning | UsingTemporaryFlag | modelerfour.treat-type-object-as-anything options is a temporary flag. It WILL be removed in the future.
verbose | [1.78 s]   ModelerFour/api-version-mode:client
verbose | [1.78 s]   ModelerFour/api-version-parameter:constant
verbose | [1.78 s]   ModelerFour/use-model-namespace:false
info    | Autorest completed in 2.54s. 211 files generated.

字符串
正如你在上面看到的,autorest PowerShell扩展生成我的模块没有任何错误
然后当我尝试用build-module.ps1构建这个模块时,我得到了下面的错误

D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(63,54): error CS1525: Invalid expression term '' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(63,54): error CS1073: Unexpected token '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(63,54): error CS1056: Unexpected character '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(116,54): error CS1525: Invalid expression term '' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(116,54): error CS1073: Unexpected token '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(116,54): error CS1056: Unexpected character '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(179,54): error CS1525: Invalid expression term '' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(179,54): error CS1073: Unexpected token '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(179,54): error CS1056: Unexpected character '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(242,54): error CS1525: Invalid expression term '' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(242,54): error CS1073: Unexpected token '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(242,54): error CS1056: Unexpected character '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(295,54): error CS1525: Invalid expression term '' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(295,54): error CS1073: Unexpected token '$' [D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\BsnIPTablesCli.csproj]
D:\Source\Repos\Resa\IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs(295,54): error CS1056: Unexpected character '$'


经过我的一些调查,我发现我的错误存在,因为autorest powershell模块使用IpTables.Api\Source\BSN.IpTables.Cli\generated\generated\api\BsnIPTablesCli.cs中的$host变量,如下所示

var _url = new global::System.Uri($"{$host}{pathAndQuery}");


这种形式的变量不存在,在C#中格式无效

BsnIPTablesCli.cs是由autorest.powershell生成的,所以我想通过autorest纠正这个问题。powershell和我不怎么做?

我的代码存在于https://github.com/BSVN/IpTables.Api/pull/22

niwlg2el

niwlg2el1#

正如你在autorest.powershell上的build module failed because invalid variable generated GitHub ticket中看到的,dolauli说:
@soroshsabz因为你没有提供swagger,我猜根源是你没有在swagger中指定host。这里有一个例子。
因此,如果你想纠正这个问题,你需要将host添加到swagger.json中,为了做到这一点,你可以在How to add host variable in swagger json file at C#中看到,你需要在初始化swagger时在swagger生成选项中添加下面的代码,如下所示

// Add host to generated swagger file (swagger.json)
            options.AddServer(new OpenApiServer {
                Url = "http://{serverAddress}",
                Description = "IpTables Test Server",
                Variables = new Dictionary<string, OpenApiServerVariable>
                {
                    { "serverAddress", new OpenApiServerVariable {
                                                Default = "192.168.21.56:8080",
                                                Description = "Target Server Address" }
                    }
                }
            });

字符串

相关问题