public int Execute(CommandLineOptions options) { Debug.Assert(options != null, "options is null."); var targetProjectPath = options.TargetProject ?? Directory.GetCurrentDirectory(); var targetProject = _projectFactory.Create(targetProjectPath, options.Framework, options.Configuration, options.BuildOutputPath); var startupProject = string.IsNullOrEmpty(options.StartupProject) ? targetProject : _projectFactory.Create(options.StartupProject, targetProject.TargetFramework, options.Configuration, options.BuildOutputPath); Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogUsingTargetProject, targetProject.ProjectName)); Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogUsingStartupProject, startupProject.ProjectName)); Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogUsingFramework, startupProject.TargetFramework.GetShortFolderName())); Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogUsingConfiguration, startupProject.Configuration)); if (!options.NoBuild) { _projectBuilder.EnsureBuild(startupProject); } Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogDataDirectory, startupProject.TargetDirectory)); var commandSpec = _commandSpecFactory.Create(startupProject, targetProject, options.IsVerbose, options.RemainingArguments); Reporter.Verbose.WriteLine(string.Format(ToolsDotNetStrings.LogBeginDispatch, startupProject.ProjectName)); return(Command.Create(commandSpec) .Execute() .ExitCode); }