{"action":"created","issue":{"url":"https://api.github.com/repos/xunit/xunit/issues/671","labels_url":"https://api.github.com/repos/xunit/xunit/issues/671/labels{/name}","comments_url":"https://api.github.com/repos/xunit/xunit/issues/671/comments","events_url":"https://api.github.com/repos/xunit/xunit/issues/671/events","html_url":"https://github.com/xunit/xunit/issues/671","id":115958441,"number":671,"title":"Commit 117d11e removes ability to specify multiple assemblies","user":{"login":"cherrydev","id":1072616,"avatar_url":"https://avatars.githubusercontent.com/u/1072616?v=3","gravatar_id":"","url":"https://api.github.com/users/cherrydev","html_url":"https://github.com/cherrydev","followers_url":"https://api.github.com/users/cherrydev/followers","following_url":"https://api.github.com/users/cherrydev/following{/other_user}","gists_url":"https://api.github.com/users/cherrydev/gists{/gist_id}","starred_url":"https://api.github.com/users/cherrydev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cherrydev/subscriptions","organizations_url":"https://api.github.com/users/cherrydev/orgs","repos_url":"https://api.github.com/users/cherrydev/repos","events_url":"https://api.github.com/users/cherrydev/events{/privacy}","received_events_url":"https://api.github.com/users/cherrydev/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/xunit/xunit/labels/[a]%20dnx.xunit","name":"[a] dnx.xunit","color":"5319e7"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-11-09T20:26:19Z","updated_at":"2015-11-09T21:32:46Z","closed_at":null,"body":"In xunit/dnx.xunit@117d11e the command line parser for the DNX runner replaced the (very useful) ability to specify multiple assemblies on the command line with the ability to specify a config file.  Since only the command line parsing portion of this was removed, but not the rest of the support (for example `GetProjectFile` still takes and processes a list of multiple assemblies) this seems like an oversight, or that the code was somehow left unfinished.  In fact, the error handling implies that multiple assemblies are support: `throw new ArgumentException(\"must specify at least one assembly\");`\r\nAm I missing something?\r\n"},"comment":{"url":"https://api.github.com/repos/xunit/xunit/issues/comments/155203668","html_url":"https://github.com/xunit/xunit/issues/671#issuecomment-155203668","issue_url":"https://api.github.com/repos/xunit/xunit/issues/671","id":155203668,"user":{"login":"cherrydev","id":1072616,"avatar_url":"https://avatars.githubusercontent.com/u/1072616?v=3","gravatar_id":"","url":"https://api.github.com/users/cherrydev","html_url":"https://github.com/cherrydev","followers_url":"https://api.github.com/users/cherrydev/followers","following_url":"https://api.github.com/users/cherrydev/following{/other_user}","gists_url":"https://api.github.com/users/cherrydev/gists{/gist_id}","starred_url":"https://api.github.com/users/cherrydev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cherrydev/subscriptions","organizations_url":"https://api.github.com/users/cherrydev/orgs","repos_url":"https://api.github.com/users/cherrydev/repos","events_url":"https://api.github.com/users/cherrydev/events{/privacy}","received_events_url":"https://api.github.com/users/cherrydev/received_events","type":"User","site_admin":false},"created_at":"2015-11-09T21:32:46Z","updated_at":"2015-11-09T21:32:46Z","body":"Well yes, you could actually, but maybe I didn't explain myself very well.  I know that you can only be executing within the context of a single project at a time, but the command line options allowed you to list which assemblies (referenced from the current project) were used to discover the tests themselves.  Therefore you could have a single project that referenced all of your test projects and then you just list the referenced assemblies on the command line (suffixed by .dll) and it would discover the tests from all of the assemblies that you specify.  This was extremely useful because it allowed me to split my tests up into multiple projects (for each layer of my application) and then still run them together.  For users not using VS, it was also valuable for allowing you to run all of your tests inside of a single debugger session since you don't need to use a shell script to run multiple assemblies.\r\n\r\nIt appears that it would be very, very simple to re-enable that functionality by parsing the arguments since switches start with '-', the config file ends in '.json' and assemblies would end in 'dll', making them unambiguous.\r\n\r\nHere is the relevant code from xunit/dnx.xunit@b7bbc655fe3d419ff0233e67d0b1cf83aa171dd2, before the change that added the config file:\r\n\r\n```csharp\r\n            var assemblies = new List<Tuple<string, string>>();\r\n\r\n            while (arguments.Count > 0)\r\n            {\r\n                if (arguments.Peek().StartsWith(\"-\"))\r\n                    break;\r\n\r\n                var assemblyFile = arguments.Pop();\r\n                string configFile = null;\r\n\r\n                assemblies.Add(Tuple.Create(assemblyFile, configFile));\r\n            }\r\n\r\n            if (assemblies.Count == 0)\r\n                throw new ArgumentException(\"must specify at least one assembly\");\r\n\r\n            var project = GetProjectFile(assemblies);\r\n```\r\n\r\nInstead, now it simply pulls the first argument from the list, assumes it's the name of an assembly, makes a hard-coded single-item list and passes THAT to `GetProjectFile()`:\r\n\r\n```csharp\r\n            if (arguments.Count == 0)\r\n                throw new ArgumentException(\"must specify at least one assembly\");\r\n\r\n            var assemblyFile = arguments.Pop();\r\n            string configFile = null;\r\n            if (arguments.Count > 0)\r\n            {\r\n                var value = arguments.Peek();\r\n                if (!value.StartsWith(\"-\") && value.EndsWith(\".json\", StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    configFile = arguments.Pop();\r\n                    if (!fileExists(configFile))\r\n                        throw new ArgumentException(string.Format(\"config file not found: {0}\", configFile));\r\n                }\r\n            }\r\n\r\n            var assemblies = new List<Tuple<string, string>> { Tuple.Create(assemblyFile, configFile) };\r\n            var project = GetProjectFile(assemblies);\r\n```"}}