2017-07-08 66 views
2

我想鏈接一些命令/任務我在tasks.json定義。使用相同的命令運行多個任務?

我有很多不同的子項目(C#csproj文件),應該建立,然後測試(shell命令)在一個大的單一任務。

我有這個tasks.json工作,但我只能調用不同的命令一個接一個。

+0

你是什麼意思,你只能一個接一個地調用它們?你能提供你想要完成的更多細節嗎? –

+0

當然,謝謝你回來。我想按下一個按鈕,然後建立6個子項目,然後運行6個測試命令。其實就是這樣。 – Geri

+0

有沒有辦法定義一個任務依賴或類似的? – Geri

回答

1

哇,有自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" 
     } 
    ] 
} 
+0

不錯的發現。他們需要更新他們的文檔,因爲我沒有在任務的文檔中看到任何「dependsOn」的提及。這正是我一直在尋找的,但有點奇怪的是,你必須以相反的順序來定義你的任務。 –

+0

是的,我在某處隨機發布了一些'tasks.json'上的GitHub。 – Geri

1

更新

得到進一步澄清後,你所要完成可配置爲在Visual Studio後期生成步驟。爲將要構建的最後一個項目配置命令。

enter image description here

原來的答案


可以並行執行您的任務:

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; } 
} 
+0

哇,你快。我正在考慮將此作爲一個選項,因爲我可以在'.csproj'文件中掛接任何命令,但是我想在VS Code中指定它以使組織/顯式有所變化。 – Geri

+1

您可以將此代碼放在獨立的'.csproj'中,並將其作爲任務運行。你可以使用你的json中的設置來控制它的功能。例如,啓動一個運行單元測試並返回的Process。您的單元測試將會執行,但VSCode可以繼續執行下一個任務,因爲它不會等待您的單元測試完成。 –