是否可以在postpublish脚本中使用带双引号的命令参数?

时间:2017-01-18 17:08:33

标签: c# asp.net-core asp.net-core-mvc .net-core

我想在我的ASP.NET Core项目的postpublish脚本中调用一个命令。该命令需要一个包含空格的参数,并包含在"中。下面是我将运行的所需命令,这在从命令行手动运行时有效:

dotnet nswag webapi2swagger /Assembly:./path/to/assembly.dll /Output:./path/to/swagger.json /InfoTitle:"My API Name" /InfoVersion:v1

在我的project.json中,此命令包含在JSON字符串中。为了在字符串中使用引号,我使用\

来转义它们

"dotnet nswag webapi2swagger /Assembly:%publish:OutputPath%/assembly.dll /Output:%publish:OutputPath%/docs/swagger.json /InfoTitle:\"My API\" /InfoVersion:v1"

不幸的是,虽然这会创建一个有效的JSON字符串,但在post publish上运行的命令似乎实际上解析了转义字符。因此,传递给InfoTitle的值为\"My而非"My API",就像我期望的那样。

这是一个错误吗?是否有可能以某种方式在postpublish脚本中以不同方式转义引号以获得我期望的结果?

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,我需要在postPublish上运行命令,但在VS2015中发布时收到消息“找不到匹配命令的命令”cmd.exe“”。

我最终要做的是在项目根目录中创建一个postPublish.cmd文件,并将其配置为在project.json中的postPublish上运行,并将发布输出文件夹传递给脚本。

    "postpublish": [
        "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%",
        "postPublish.cmd %publish:OutputPath%",
    ]

你将在postPublish.cmd脚本中拥有更多控制权,而不需要转义“path”,例如:

:: use %1 to access the temp publish folder:
rmdir /s /q "%1\wwwroot\Uploads"

:: The script will be executed at the root of your project. Testing this:
cd >> test.txt
type "project.json" >> testing2.txt