74

为了配置Visual Studio代码以在OSX上调试C#脚本,我完成了以下文章中列出的所有步骤:

使用Visual Studio代码在OSX上调试C#

当我尝试调试示例C#脚本时,Visual Studio代码报告了此错误:

找不到preLaunch任务“build”

因此,我无法检查脚本中定义的变量。

这是启动.json文件:

{“版本”:“0.2.0”,“配置”:[{“name”:“启动控制台应用程序”,“type”:“mono”,“request”:“launch”,“preLaunchTask”:“构建”,“程序”:“${workspaceRoot}/program.exe”,“参数”:[],“cwd”:“${workspaceRoot}”,“stopAtEntry”:假}]}

这是tasks.json(任务.json)文件:

{“版本”:“0.1.0”,“命令”:“mcs”,“参数”:[“-debug”,“程序.cs”],  “showOutput”:“silent”,“taskSelector”:“/t:”,“任务”:[{“taskName”:“exe”,“isBuildCommand”:true,“problemMatcher”:“$msCompile”}]}

我该如何解决这个问题?

1

6个答案6

重置为默认值
87

您可以使用Visual Studio代码来解决此问题。

当您看到错误消息时,单击以下步骤错误样本

  1. 配置任务
  2. 从模板创建tasks.json文件
  3. NET核心执行。NET核心构建命令

VSCode将创建一个类似的文件:

{//请参见https://go.microsoft.com/fwlink/?LinkId=733558//有关tasks.json格式的文档“版本”:“2.0.0”,“任务”:[{“label”:“构建”,“command”:“dotnet构建”,“type”:“外壳”,“组”:“构建”,“演示”:{“透露”:“沉默”},“problemMatcher”:“$msCompile”}]}

它完成了。VSCode将在运行之前生成项目。

5
  • 1
    如果您在项目根目录的子目录中创建应用程序,并且参数显式定义了app.csproj文件的直接路径,则也会看到此错误,在这种情况下,您必须更改路径以匹配该文件所在的位置。只需遵循默认设置,就不会出现此问题,但如果您必须将.net核心应用程序设置在一个子目录中,以防处理不同语言的多个项目,请注意这样做 评论 2019年5月29日15:46
  • 1
    我还必须更新launch.json并设置正确的路径,而不是“program”:“${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insort-project-name-here>.dll” 评论 2019年10月6日23:12
  • 如果你觉得初学者很难用所有关键字和占位符自定义启动前任务,你可以从.json文件在调试可执行文件之前,运行任何启动前任务。也就是说,确实需要一些时间来了解它在VSCode在线文档中是如何工作的。
    – 用户11991978
    评论 2020年10月30日10:03
  • 谢谢您。对于那些使用VS项目并试图用VSC加载它的人来说,由于错误的VS版本,您可能仍然会遇到问题。我使用Microsoft链接从VSC构建了一个C#项目:learn.microsoft.com/en-us/dotnet/core/tutorials/…
    – E235型
    评论 2022年1月5日14:50
  • 关于OzzyTheGiant的评论:如果您的项目在一个子目录中,有一个来自Germanán的简单示例在这里如何修复它。
    – 乔伊
    评论 2022年4月6日21:58
23

由于Visual Studio代码在tasks.json(任务.json)使用任务名称值设置为“生成”.

这个启动前任务的属性启动.json文件定义了在启动脚本之前应该执行的任务。根据问题,Visual Studio代码已配置为运行任务建造在启动脚本之前:

preLaunchTask:“构建”

但没有指定任务“生成”在中tasks.json(任务.json)文件。

要解决此问题,您应该更改启动前任务属性到“exe”,它是在tasks.json(任务.json)文件。

4
  • 6
    那没用-我没有可执行文件默认tasks.json文件中的task 评论 2017年6月22日13:20
  • 在执行dotnet新的webapi. 评论 2017年7月31日12:24
  • @rbraun me在默认tasks.json中也没有exe任务,所以我从launch.json中删除了它,现在它可以工作了。 评论 2017年9月12日4:04
  • 请注意任务名称已弃用,tasks.json应使用标签命名任务。然后,launch.json可以通过该标签引用任务。 评论 2017年10月10日13:28
10

似乎每个场景的情况都不同。

对我来说,@Jeferson Tenorio起到了作用,但它还需要一些步骤,所以让我们补充一下:

  1. 单击配置任务:在此处输入图像描述
  2. 从模板创建tasks.json文件
  3. .NET内核执行。NET核心构建命令
  4. 转到您的启动.json文件,在configurations/program下您会发现:

    ${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insort-project-name-here>.dll

    只需更换<在此处插入目标框架><插入项目-名称-位置>使用您的目标框架,在我的情况下,这将是网络核心应用2.0然后是项目名称(如果您没有更改任何内容,则项目名称应与创建项目的文件夹相同),其应如下所示:

    “程序”:“${workspaceFolder}/bin/Debug/netcoreapp2.0/MyProject.dll”

    我希望这能有所帮助。

5

正如上面的答案所建议的那样,您需要在中定义启动项启动.json文件而不在中blah.代码-工作空间文件。

后者不读取中定义的任务tasks.json(任务.json)但只有在相同的.code-workspace文件中定义的那些。

错误报告:

1
  • 这就是我的解决方案-我在settings.json中配置了启动设置,但它不起作用。将它们分离到launch.json中修复了它,谢谢! 评论 2022年12月17日23:34
1

在Linux上,为了使build命令生效,我需要将tasks.json文件从以下位置更改:

{//请参见https://go.microsoft.com/fwlink/?LinkId=733558//有关tasks.json格式的文档“版本”:“2.0.0”,“任务”:[{“label”:“构建”,“command”:“dotnet构建”,“type”:“外壳”,“参数”:[//要求dotnet build生成文件名的完整路径。“/property:GenerateFullPaths=true”,//不要生成摘要,否则会导致问题面板中出现重复错误“/consoleloggerparameters:NoSummary”],“组”:“构建”,“演示”:{“透露”:“沉默”},“problemMatcher”:“$msCompile”}]}

收件人:

{//请参见https://go.microsoft.com/fwlink/?LinkId=733558//有关tasks.json格式的文档“版本”:“2.0.0”,“任务”:[{“label”:“构建”,“命令”:“dotnet”,“type”:“外壳”,“参数”:[“构建”//要求dotnet build生成文件名的完整路径。“/property:GenerateFullPaths=true”,//不要生成摘要,否则会导致问题面板中出现重复错误“/consoleloggerparameters:NoSummary”],“组”:“构建”,“演示”:{“透露”:“沉默”},“problemMatcher”:“$msCompile”}]}

原因是,Linux将把VSC生成的任务视为运行命令“dotnet build”,而不是带有参数“build“的“dotnet”。如果没有更改,您将收到“dotnet build:command not found”,退出代码为127

0

对于Ubuntu Linux 20.04 LTS(但在其他操作系统上可能是一样的),preLaunchTask对我起作用的是使用本地tasks.json和launch.json

所以我的文件夹结构(预构建)是:

.vscode/launch.json.vscode/tasks.json距离src/索引.tspackage.json包tsconfig.json(配置.json)

我的launch.json包含:

{“配置”:[{“type”:“节点”,“request”:“launch”,“name”:“TS预启动任务构建”,“程序”:“${file}”,“preLaunchTask”:“tsc:build”,“outFiles”:[“${workspaceFolder}/dist/**/*.js”],“跳过文件”:[“<node_internals>/**”,“node_modules”,]},]}

My tasks.json包含:

{“版本”:“2.0.0”,“任务”:[{“type”:“外壳”,“命令”:“echo hello yes working!”,“problemMatcher”:[],“label”:“myTask”},{“type”:“typescript”,“tsconfig”:“tsconfig.json”,“problemMatcher”:[“$tsc”],“组”:“构建”,“label”:“tsc:build”},]}

我的tsconfig.json包含:

{“编译器选项”:{“outDir”:“./dist”,“sourceMap”:true,“target”:“es5”,“模块”:“commonjs”},“包括”:[“src/**/*”]}

用法:当在index.ts中设置断点时,只需点击F5

我还包含了另一个任务“myTask”,您可以将launch.json中的preLaunchTask行更改为:“preLaunchTask”:“myTask”,(在这里,它将向控制台输出一些文本,以验证preLaunchTask是否正在工作)

这样,如果仍有问题,可以查看问题是在tsconfig设置中,还是在preTaskLaunch设置中。

(我本以为它应该自己解决这个问题,但显然在编写本文的当前时间还没有解决——但(对我来说)确实有优势,可以基于项目而不是全局配置将调试配置提交给repo)

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.