Convert dotnet-run to System.CommandLine

This commit is contained in:
Krzysztof Wicher 2015-11-20 19:00:56 -08:00
parent 6e465818c5
commit 0ecbc0d5fc
11 changed files with 284 additions and 189 deletions

View file

@ -39,13 +39,13 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.Tools.Init
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.Tools.Compiler.Native", "src\Microsoft.DotNet.Tools.Compiler.Native\Microsoft.DotNet.Tools.Compiler.Native.xproj", "{172485DD-B94E-4F3E-851E-CF23908FF960}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "src\corehost\cmake\win7-x64\ALL_BUILD.vcxproj", "{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", "src\corehost\cmake\win7-x64\ALL_BUILD.vcxproj", "{86A16EC3-EC30-391A-A411-9E7EF1357A0A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "corehost", "src\corehost\cmake\win7-x64\corehost.vcxproj", "{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "corehost", "src\corehost\cmake\win7-x64\corehost.vcxproj", "{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "src\corehost\cmake\win7-x64\ZERO_CHECK.vcxproj", "{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}"
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", "src\corehost\cmake\win7-x64\ZERO_CHECK.vcxproj", "{AB25E68A-8581-30C1-B19C-61FCADE4774C}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.Tools.Pack", "src\Microsoft.DotNet.Tools.Pack\Microsoft.DotNet.Tools.Pack.xproj", "{3E196F0D-ACEA-433D-8D07-5F8A44517C28}"
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.Tools.Pack", "src\Microsoft.DotNet.Tools.Pack\Microsoft.DotNet.Tools.Pack.xproj", "{0F480791-4BA0-44E3-8CC4-C71656664175}"
EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Microsoft.DotNet.ProjectModel.Workspaces", "src\Microsoft.DotNet.ProjectModel.Workspaces\Microsoft.DotNet.ProjectModel.Workspaces.xproj", "{BD7833F8-3209-4682-BF75-B4BCA883E279}"
EndProject
@ -271,58 +271,58 @@ Global
{172485DD-B94E-4F3E-851E-CF23908FF960}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
{172485DD-B94E-4F3E-851E-CF23908FF960}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
{172485DD-B94E-4F3E-851E-CF23908FF960}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Debug|Any CPU.ActiveCfg = Debug|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Debug|x64.ActiveCfg = Debug|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Debug|x64.Build.0 = Debug|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Release|Any CPU.ActiveCfg = Release|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Release|x64.ActiveCfg = Release|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.Release|x64.Build.0 = Release|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Debug|Any CPU.ActiveCfg = Debug|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Debug|x64.ActiveCfg = Debug|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Debug|x64.Build.0 = Debug|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Release|Any CPU.ActiveCfg = Release|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Release|x64.ActiveCfg = Release|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.Release|x64.Build.0 = Release|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Debug|Any CPU.ActiveCfg = Debug|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Debug|x64.ActiveCfg = Debug|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Debug|x64.Build.0 = Debug|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Release|Any CPU.ActiveCfg = Release|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Release|x64.ActiveCfg = Release|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.Release|x64.Build.0 = Release|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Debug|x64.ActiveCfg = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Debug|x64.Build.0 = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Release|Any CPU.Build.0 = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Release|x64.ActiveCfg = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.Release|x64.Build.0 = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
{3E196F0D-ACEA-433D-8D07-5F8A44517C28}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Debug|Any CPU.ActiveCfg = Debug|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Debug|x64.ActiveCfg = Debug|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Debug|x64.Build.0 = Debug|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Release|Any CPU.ActiveCfg = Release|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Release|x64.ActiveCfg = Release|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.Release|x64.Build.0 = Release|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{86A16EC3-EC30-391A-A411-9E7EF1357A0A}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Debug|Any CPU.ActiveCfg = Debug|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Debug|x64.ActiveCfg = Debug|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Debug|x64.Build.0 = Debug|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Release|Any CPU.ActiveCfg = Release|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Release|x64.ActiveCfg = Release|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.Release|x64.Build.0 = Release|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Debug|Any CPU.ActiveCfg = Debug|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Debug|x64.ActiveCfg = Debug|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Debug|x64.Build.0 = Debug|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.MinSizeRel|Any CPU.ActiveCfg = MinSizeRel|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.MinSizeRel|x64.ActiveCfg = MinSizeRel|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.MinSizeRel|x64.Build.0 = MinSizeRel|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Release|Any CPU.ActiveCfg = Release|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Release|x64.ActiveCfg = Release|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.Release|x64.Build.0 = Release|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.RelWithDebInfo|Any CPU.ActiveCfg = RelWithDebInfo|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.RelWithDebInfo|x64.ActiveCfg = RelWithDebInfo|x64
{AB25E68A-8581-30C1-B19C-61FCADE4774C}.RelWithDebInfo|x64.Build.0 = RelWithDebInfo|x64
{0F480791-4BA0-44E3-8CC4-C71656664175}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Debug|x64.ActiveCfg = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Debug|x64.Build.0 = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.MinSizeRel|Any CPU.ActiveCfg = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.MinSizeRel|Any CPU.Build.0 = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.MinSizeRel|x64.ActiveCfg = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.MinSizeRel|x64.Build.0 = Debug|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Release|Any CPU.Build.0 = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Release|x64.ActiveCfg = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.Release|x64.Build.0 = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.RelWithDebInfo|Any CPU.ActiveCfg = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.RelWithDebInfo|Any CPU.Build.0 = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.RelWithDebInfo|x64.ActiveCfg = Release|Any CPU
{0F480791-4BA0-44E3-8CC4-C71656664175}.RelWithDebInfo|x64.Build.0 = Release|Any CPU
{BD7833F8-3209-4682-BF75-B4BCA883E279}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD7833F8-3209-4682-BF75-B4BCA883E279}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD7833F8-3209-4682-BF75-B4BCA883E279}.Debug|x64.ActiveCfg = Debug|Any CPU
@ -374,10 +374,10 @@ Global
{A16958E1-24C7-4F1E-B317-204AD91625DD} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{BC765FBF-AD7A-4A99-9902-5540C5A74181} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{172485DD-B94E-4F3E-851E-CF23908FF960} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{7DFC6663-5AF1-4307-AAD7-B056011EF6F0} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{1187A81C-B59E-4B0B-A0A0-ED55D8E39A9D} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{C3B057EE-D6C1-4D16-9E1F-D0EED4181D13} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{3E196F0D-ACEA-433D-8D07-5F8A44517C28} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{86A16EC3-EC30-391A-A411-9E7EF1357A0A} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{D22D1279-24FF-3F01-9ADB-9F23CA8AD062} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{AB25E68A-8581-30C1-B19C-61FCADE4774C} = {C0CA389D-A35E-4082-BC05-598C9D6301BC}
{0F480791-4BA0-44E3-8CC4-C71656664175} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{BD7833F8-3209-4682-BF75-B4BCA883E279} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
{DB29F219-DC92-4AF7-A2EE-E89FFBB3F5F0} = {ED2FE3E2-F7E7-4389-8231-B65123F2076F}
EndGlobalSection

View file

@ -8,6 +8,7 @@
<add key="AspNetCIDev" value="https://www.myget.org/F/aspnetcidev/api/v3/index.json" />
<add key="roslyn-nightly" value="https://www.myget.org/F/roslyn-nightly/api/v3/index.json" />
<add key="api.nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="dotnet-corefxlab" value="https://www.myget.org/F/dotnet-corefxlab/api/v3/index.json" />
<add key="corefxlab" value="https://www.myget.org/F/netcore-package-prototyping/api/v3/index.json" />
<add key="corert" value="https://www.myget.org/F/dotnet/auth/3e4f1dbe-f43a-45a8-b029-3ad4d25605ac/api/v2" />
</packageSources>

View file

@ -125,6 +125,8 @@ namespace Microsoft.DotNet.Cli.Utils
public CommandResult Execute()
{
Reporter.Verbose.WriteLine($"Running {_process.StartInfo.FileName} {_process.StartInfo.Arguments}");
ThrowIfRunning();
_running = true;

View file

@ -33,12 +33,24 @@ namespace Microsoft.DotNet.Cli.Utils
private static bool GetBool(string name, bool defaultValue = false)
{
var str = Environment.GetEnvironmentVariable(name);
bool value;
if(string.IsNullOrEmpty(str) || !bool.TryParse(str, out value))
if (string.IsNullOrEmpty(str))
{
return defaultValue;
}
return value;
switch (str.ToLowerInvariant())
{
case "true":
case "1":
case "yes":
return true;
case "false":
case "0":
case "no":
return false;
default:
return defaultValue;
}
}
}
}

View file

@ -5,7 +5,6 @@ using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using Microsoft.Dnx.Runtime.Common.CommandLine;
namespace Microsoft.DotNet.Cli.Utils
{

View file

@ -21,7 +21,8 @@
"Microsoft.Extensions.CommandLineUtils.Sources": {
"type": "build",
"version": "1.0.0-*"
}
},
"System.CommandLine" : "0.1.0-d111815-3"
},
"frameworks": {
"dnxcore50": { }

View file

@ -1,15 +1,9 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.Dnx.Runtime.Common.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.Extensions.ProjectModel;
using NuGet.Frameworks;
using System;
using System.CommandLine;
namespace Microsoft.DotNet.Tools.Run
{
@ -19,52 +13,24 @@ namespace Microsoft.DotNet.Tools.Run
{
DebugHelper.HandleDebugSwitch(ref args);
var app = new CommandLineApplication(throwOnUnexpectedArg: false);
app.Name = "dotnet run";
app.FullName = ".NET Executor";
app.Description = "Runner for the .NET Platform";
app.HelpOption("-h|--help");
RunCommand runCmd = new RunCommand();
var framework = app.Option("-f|--framework <FRAMEWORK>", "Compile a specific framework", CommandOptionType.MultipleValue);
var configuration = app.Option("-c|--configuration <CONFIGURATION>", "Configuration under which to build", CommandOptionType.SingleValue);
var preserveTemporaryOutput = app.Option("-t|--preserve-temporary", "Keep the output's temporary directory around", CommandOptionType.NoValue);
// This is required to be an option because otherwise we can't tell if the first argument is a project or the first argument to pass to an application
var project = app.Option("-p|--project <PROJECT_PATH>", "The path to the project to run (defaults to the current directory). Can be a path to a project.json or a project directory.", CommandOptionType.SingleValue);
app.OnExecute(() =>
ArgumentSyntax.Parse(args, syntax =>
{
// Locate the project and get the name and full path
var path = project.Value();
if (!string.IsNullOrEmpty(path))
{
if (File.Exists(path) && (Path.GetExtension(path) == ".csx"))
{
return RunInteractive(path);
}
}
else
{
path = Directory.GetCurrentDirectory();
}
syntax.HandleErrors = false;
syntax.DefineOption("f|framework", ref runCmd.Framework, "Compile a specific framework");
syntax.DefineOption("c|configuration", ref runCmd.Configuration, "Configuration under which to build");
syntax.DefineOption("t|preserve-temporary", ref runCmd.PreserveTemporary, "Keep the output's temporary directory around");
syntax.DefineOption("p|project", ref runCmd.Project, "The path to the project to run (defaults to the current directory). Can be a path to a project.json or a project directory");
var contexts = ProjectContext.CreateContextForEachFramework(path);
ProjectContext context;
if (!framework.HasValue())
{
context = contexts.First();
}
else
{
var fx = NuGetFramework.Parse(framework.Value());
context = contexts.FirstOrDefault(c => c.TargetFramework.Equals(fx));
}
return Run(context, configuration.Value() ?? Constants.DefaultConfiguration, app.RemainingArguments, preserveTemporaryOutput.HasValue());
// TODO: this is not supporting args which can be switches (i.e. --test)
// TODO: we need to make a change in System.CommandLine or parse args ourselves.
syntax.DefineParameterList("args", ref runCmd.Args, "Arguments to pass to the executable or script");
});
try
{
return app.Execute(args);
return runCmd.Start();
}
catch (Exception ex)
{
@ -76,77 +42,5 @@ namespace Microsoft.DotNet.Tools.Run
return 1;
}
}
private static int Run(ProjectContext context, string configuration, List<string> remainingArguments, bool preserveTemporaryOutput)
{
// Create a temporary directory
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
// Compile to that directory
var result = Command.Create($"dotnet-compile", $"--output \"{tempDir}\" --temp-output \"{tempDir}\" --framework \"{context.TargetFramework}\" --configuration \"{configuration}\" {context.ProjectFile.ProjectDirectory}")
.ForwardStdOut(onlyIfVerbose: true)
.ForwardStdErr()
.Execute();
if (result.ExitCode != 0)
{
return result.ExitCode;
}
// Now launch the output and give it the results
var outputName = Path.Combine(tempDir, context.ProjectFile.Name + Constants.ExeSuffix);
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
if (context.TargetFramework.IsDesktop())
{
// Run mono if we're running a desktop target on non windows
remainingArguments.Insert(0, outputName + ".exe");
if (string.Equals(configuration, "Debug", StringComparison.OrdinalIgnoreCase))
{
// If we're compiling for the debug configuration then add the --debug flag
// other options may be passed using the MONO_OPTIONS env var
remainingArguments.Insert(0, "--debug");
}
outputName = "mono";
}
}
// Locate the runtime
string runtime = Environment.GetEnvironmentVariable("DOTNET_HOME");
if (string.IsNullOrEmpty(runtime))
{
// Use the runtime deployed with the tools, if present
var candidate = Path.Combine(AppContext.BaseDirectory, "..", "runtime");
if (File.Exists(Path.Combine(candidate, Constants.LibCoreClrName)))
{
runtime = Path.GetFullPath(candidate);
}
}
result = Command.Create(outputName, string.Join(" ", remainingArguments))
.ForwardStdOut()
.ForwardStdErr()
.EnvironmentVariable("DOTNET_HOME", runtime)
.Execute();
// Clean up
if (!preserveTemporaryOutput)
{
Directory.Delete(tempDir, recursive: true);
}
return result.ExitCode;
}
private static int RunInteractive(string scriptName)
{
var command = Command.Create($"dotnet-repl-csi", scriptName)
.ForwardStdOut()
.ForwardStdErr();
var result = command.Execute();
return result.ExitCode;
}
}
}

View file

@ -0,0 +1,154 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.Extensions.ProjectModel;
using NuGet.Frameworks;
namespace Microsoft.DotNet.Tools.Run
{
public class RunCommand
{
public string Framework = null;
public string Configuration = null;
public bool PreserveTemporary = false;
public string Project = null;
public IReadOnlyList<string> Args = null;
bool _isInteractive = false;
ProjectContext _context;
List<string> _args;
public int Start()
{
CalculateDefaultsForNonAssigned();
if (_isInteractive)
{
return RunInteractive(Project);
}
else
{
return RunExecutable();
}
}
private void CalculateDefaultsForNonAssigned()
{
if (!string.IsNullOrEmpty(Project))
{
if (File.Exists(Project) && (Path.GetExtension(Project) == ".csx"))
{
_isInteractive = true;
return;
}
}
else
{
Project = Directory.GetCurrentDirectory();
}
if (string.IsNullOrWhiteSpace(Configuration))
{
Configuration = Constants.DefaultConfiguration;
}
var contexts = ProjectContext.CreateContextForEachFramework(Project);
if (Framework == null)
{
_context = contexts.First();
}
else
{
var fx = NuGetFramework.Parse(Framework);
_context = contexts.FirstOrDefault(c => c.TargetFramework.Equals(fx));
}
if (Args == null)
{
_args = new List<string>();
}
else
{
_args = new List<string>(Args);
}
}
private int RunExecutable()
{
// Create a temporary directory
var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
// Compile to that directory
var result = Command.Create($"dotnet-compile", $"--output \"{tempDir}\" --temp-output \"{tempDir}\" --framework \"{_context.TargetFramework}\" --configuration \"{Configuration}\" {_context.ProjectFile.ProjectDirectory}")
.ForwardStdOut(onlyIfVerbose: true)
.ForwardStdErr()
.Execute();
if (result.ExitCode != 0)
{
return result.ExitCode;
}
// Now launch the output and give it the results
var outputName = Path.Combine(tempDir, _context.ProjectFile.Name + Constants.ExeSuffix);
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
if (_context.TargetFramework.IsDesktop())
{
// Run mono if we're running a desktop target on non windows
_args.Insert(0, outputName + ".exe");
if (string.Equals(Configuration, "Debug", StringComparison.OrdinalIgnoreCase))
{
// If we're compiling for the debug configuration then add the --debug flag
// other options may be passed using the MONO_OPTIONS env var
_args.Insert(0, "--debug");
}
outputName = "mono";
}
}
// Locate the runtime
string runtime = Environment.GetEnvironmentVariable("DOTNET_HOME");
if (string.IsNullOrEmpty(runtime))
{
// Use the runtime deployed with the tools, if present
var candidate = Path.Combine(AppContext.BaseDirectory, "..", "runtime");
if (File.Exists(Path.Combine(candidate, Constants.LibCoreClrName)))
{
runtime = Path.GetFullPath(candidate);
}
}
result = Command.Create(outputName, string.Join(" ", _args))
.ForwardStdOut()
.ForwardStdErr()
.EnvironmentVariable("DOTNET_HOME", runtime)
.Execute();
// Clean up
if (!PreserveTemporary)
{
Directory.Delete(tempDir, recursive: true);
}
return result.ExitCode;
}
private static int RunInteractive(string scriptName)
{
var command = Command.Create($"dotnet-repl-csi", scriptName)
.ForwardStdOut()
.ForwardStdErr();
var result = command.Execute();
return result.ExitCode;
}
}
}

View file

@ -16,11 +16,8 @@
"type": "build",
"version": "1.0.0-*"
},
"Microsoft.Extensions.CommandLineUtils.Sources": {
"type": "build",
"version": "1.0.0-*"
},
"Microsoft.Net.Compilers.netcore": "1.2.0-beta-20151117-04"
"Microsoft.Net.Compilers.netcore": "1.2.0-beta-20151117-04",
"System.CommandLine" : "0.1.0-d111815-3"
},
"frameworks": {
"dnxcore50": { }

View file

@ -0,0 +1,18 @@
using System;
namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine($"I was passed {args.Length} args:");
foreach (var arg in args)
{
Console.WriteLine($"arg: [{arg}]");
}
}
}
}

View file

@ -0,0 +1,17 @@
{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Microsoft.NETCore.Runtime": "1.0.1-beta-*",
"System.IO": "4.0.10-beta-*",
"System.Console": "4.0.0-beta-*",
"System.Runtime": "4.0.21-beta-*"
},
"frameworks": {
"dnxcore50": { }
}
}