Visual Studio 2019 WSL2调试.NET Core控制台程序命令行参数报错
问题原因
WSL2调试配置的启动命令解析逻辑与本地控制台启动逻辑存在差异:
- 本地
ConsoleApp配置下,VS会将commandLineArgs的内容直接追加到应用程序启动路径之后作为应用入参,实际执行的命令结构为dotnet [应用dll路径] [commandLineArgs],参数可以正常被应用接收。 - WSL2配置下,旧版本Visual Studio 2019的WSL调试工具存在逻辑缺陷,会将
commandLineArgs的内容直接追加到dotnet命令之后、应用路径之前,实际执行的命令结构变成dotnet [commandLineArgs] [应用dll路径],此时--s会被识别为dotnet runtime的参数,而dotnet本身没有该参数,因此抛出参数不识别的报错。
可行解决方法
- 方法1:升级Visual Studio 2019到最新版本
微软在16.10及之后的VS2019更新补丁中修复了该WSL2调试参数解析的bug,升级后原有launchSettings.json配置不需要修改即可正常运行。 - 方法2:修改
commandLineArgs配置手动补全占位
如果你暂时无法升级VS,可以将WSL2配置的commandLineArgs改为以下格式,强制让参数放在应用路径之后:
其中"WSL 2": { "commandName": "WSL2", "commandLineArgs": "%LAUNCHER_PATH% --s", "distributionName": "" }%LAUNCHER_PATH%是VS内置变量,启动时会自动替换为应用dll在WSL中的实际路径,最终执行的命令结构会恢复为dotnet %LAUNCHER_PATH% --s,参数会被正确传递给应用。 - 方法3:显式指定启动逻辑
也可以通过指定可执行文件路径的方式自定义启动命令,修改配置如下:
注意将配置中的"WSL 2": { "commandName": "Executable", "executablePath": "wsl", "commandLineArgs": "dotnet ./bin/Debug/netcoreapp3.1/[你的应用名称].dll --s", "workingDirectory": "$(ProjectDir)", "distributionName": "" }netcoreapp3.1和[你的应用名称]替换为你实际使用的框架版本和应用程序集名称。
内容的提问来源于stack exchange,提问作者Ghini Antonio
相关产品推荐
相关产品推荐

