我想链接一些命令/任务我在tasks.json
定义。使用相同的命令运行多个任务?
我有很多不同的子项目(C#csproj
文件),应该建立,然后测试(shell命令)在一个大的单一任务。
我有这个tasks.json
工作,但我只能调用不同的命令一个接一个。
我想链接一些命令/任务我在tasks.json
定义。使用相同的命令运行多个任务?
我有很多不同的子项目(C#csproj
文件),应该建立,然后测试(shell命令)在一个大的单一任务。
我有这个tasks.json
工作,但我只能调用不同的命令一个接一个。
哇,有自1.10 dependsOn
财产。
请参阅发行说明中的More work on Terminal Runner。
{
"version": "2.0.0",
"tasks":
[
{
"taskName": "Build",
"isBuildCommand": true,
"command": "/Applications/Unity/Unity.app/Contents/MonoBleedingEdge/bin/xbuild",
"args":
[
"Project.sln",
"/property:GenerateFullPaths=true"
],
"showOutput": "silent",
"problemMatcher": "$msCompile"
},
{
"taskName": "Build EPPZ.Extensions.Test",
"command": "/Applications/Unity/Unity.app/Contents/MonoBleedingEdge/bin/xbuild",
"args":
[
"Assets/Plugins/eppz!/Extensions/Test.csproj",
"/property:Configuration=Local",
"/property:GenerateFullPaths=true"
],
"showOutput": "always",
"problemMatcher": "$msCompile"
},
{
"taskName": "Test EPPZ.Extensions.Test",
"isShellCommand": true,
"command": "mono",
"dependsOn": [ "Build EPPZ.Extensions.Test" ],
"args":
[
"/Users/eppz/Projects/Unity/Packages/NUnit/NUnit.ConsoleRunner.3.6.1/tools/nunit3-console.exe",
"bin/EPPZ.Extensions.Test.dll",
"--labels=All",
"--result=EPPZ.Extensions.Test.Result.xml"
],
"showOutput": "always"
},
{
"taskName": "Test",
"isShellCommand": true,
"isTestCommand": true,
"command": "echo",
"args": ["All done."],
"dependsOn": [ "Test (EPPZ.Extensions.Test)" ],
"showOutput": "always"
}
]
}
不错的发现。他们需要更新他们的文档,因为我没有在任务的文档中看到任何“dependsOn”的提及。这正是我一直在寻找的,但有点奇怪的是,你必须以相反的顺序来定义你的任务。 –
是的,我在某处随机发布了一些'tasks.json'上的GitHub。 – Geri
更新
得到进一步澄清后,你所要完成可配置为在Visual Studio后期生成步骤。为将要构建的最后一个项目配置命令。
原来的答案
可以并行执行您的任务:
public class TaskCollection
{
public string version { get; set; }
public List<Task> tasks { get; set; }
public static void RunTasks()
{
string json = new WebClient().DownloadString("https://gist.githubusercontent.com/eppz/f941f2e85e12e7cc81c63ee2ac1354e5/raw/fa15f7b9774083f481504677b96353fe0da777be/tasks.json");
TaskCollection col = new JavaScriptSerializer().Deserialize<TaskCollection>(json);
Parallel.ForEach(col.tasks, (x) =>
{
ExecuteTask(x);
}
);
}
private static void ExecuteTask(Task x)
{
//Do something
}
}
public class Task
{
public string taskName { get; set; }
public bool isBuildCommand { get; set; }
public string command { get; set; }
public string[] args { get; set; }
public string showOutput { get; set; }
public string problemMatcher { get; set; }
public bool isShellCommand { get; set; }
public bool isTestCommand { get; set; }
}
哇,你快。我正在考虑将此作为一个选项,因为我可以在'.csproj'文件中挂接任何命令,但是我想在VS Code中指定它以使组织/显式有所变化。 – Geri
您可以将此代码放在独立的'.csproj'中,并将其作为任务运行。你可以使用你的json中的设置来控制它的功能。例如,启动一个运行单元测试并返回的Process。您的单元测试将会执行,但VSCode可以继续执行下一个任务,因为它不会等待您的单元测试完成。 –
你是什么意思,你只能一个接一个地调用它们?你能提供你想要完成的更多细节吗? –
当然,谢谢你回来。我想按下一个按钮,然后建立6个子项目,然后运行6个测试命令。其实就是这样。 – Geri
有没有办法定义一个任务依赖或类似的? – Geri