2016-03-28 09:32:31 +00:00
using System ;
using System.IO ;
using System.Collections.Generic ;
using System.Linq ;
using Microsoft.DotNet.ProjectModel ;
using Microsoft.DotNet.Cli.Utils ;
namespace Microsoft.DotNet.Tools.DependencyInvoker
{
public class Program
{
2016-05-08 21:20:34 +00:00
public static int Main ( string [ ] args )
2016-03-28 09:32:31 +00:00
{
DebugHelper . HandleDebugSwitch ( ref args ) ;
var dotnetParams = new DotnetBaseParams ( "dotnet-dependency-tool-invoker" , "DotNet Dependency Tool Invoker" , "Invokes tools declared as NuGet dependencies of a project" ) ;
dotnetParams . Parse ( args ) ;
if ( string . IsNullOrEmpty ( dotnetParams . Command ) )
{
Console . WriteLine ( "A command name must be provided" ) ;
2016-05-08 21:20:34 +00:00
return 1 ;
2016-03-28 09:32:31 +00:00
}
var projectContexts =
CreateProjectContexts ( dotnetParams . ProjectPath )
. Where ( p = > dotnetParams . Framework = = null | |
dotnetParams . Framework . GetShortFolderName ( )
. Equals ( p . TargetFramework . GetShortFolderName ( ) ) ) ;
var commandFactory =
new ProjectDependenciesCommandFactory (
dotnetParams . Framework ,
dotnetParams . Config ,
dotnetParams . Output ,
dotnetParams . BuildBasePath ,
projectContexts . First ( ) . ProjectDirectory ) ;
foreach ( var projectContext in projectContexts )
{
Console . WriteLine ( $"Invoking '{dotnetParams.Command}' for '{projectContext.TargetFramework}'." ) ;
try
{
var exitCode = commandFactory . Create (
$"dotnet-{dotnetParams.Command}" ,
2016-03-28 11:18:59 +00:00
dotnetParams . RemainingArguments ,
2016-03-28 09:32:31 +00:00
projectContext . TargetFramework ,
dotnetParams . Config )
. ForwardStdErr ( )
. ForwardStdOut ( )
. Execute ( )
. ExitCode ;
Console . WriteLine ( $"Command returned {exitCode}" ) ;
}
catch ( CommandUnknownException )
{
Console . WriteLine ( $"Command not found" ) ;
2016-05-08 21:20:34 +00:00
return 1 ;
2016-03-28 09:32:31 +00:00
}
}
2016-05-08 21:20:34 +00:00
return 0 ;
2016-03-28 09:32:31 +00:00
}
private static IEnumerable < ProjectContext > CreateProjectContexts ( string projectPath = null )
{
projectPath = projectPath ? ? Directory . GetCurrentDirectory ( ) ;
if ( ! projectPath . EndsWith ( Project . FileName ) )
{
projectPath = Path . Combine ( projectPath , Project . FileName ) ;
}
if ( ! File . Exists ( projectPath ) )
{
throw new InvalidOperationException ( $"{projectPath} does not exist." ) ;
}
return ProjectContext . CreateContextForEachFramework ( projectPath ) ;
}
}
}