@@ -35,46 +35,57 @@ public static int Main(string[] args)
3535
3636 commandLineApplication . OnExecute ( ( ) =>
3737 {
38- var visualizerOptions = new VisualizerOptions (
39- skipSystem : nonsystem . HasValue ( ) ,
40- onlyConflicts : ! all . HasValue ( ) ,
41- referencedStartsWith : referencedStartsWith . HasValue ( ) ? referencedStartsWith . Value ( ) : string . Empty
42- ) ;
43-
44- var consoleLogger = new ConsoleLogger ( ! silent . HasValue ( ) ) ;
45-
46- var finalResult = GetFileList ( directoryOrFile , includeSubDirectories , consoleLogger )
47- . Bind ( fileList => GetAppDomainWithBindingRedirects ( configurationFile )
48- . Map ( appDomain => DependencyAnalyzer . Analyze (
49- fileList ,
50- appDomain ,
51- consoleLogger ,
52- visualizerOptions ) ) )
53- . Map ( result => RunVisualizers ( result , consoleLogger , visualizerOptions ) )
54- . Bind ( FailOnMissingAssemblies ) ;
55-
56- switch ( finalResult )
38+ try
5739 {
58- case Failure < bool > fail :
59- consoleLogger . LogError ( fail . Message ) ;
60- return - 1 ;
61- case Success < bool > succeed :
62- return 0 ;
63- default :
64- throw new InvalidOperationException ( "Unexpected result type" ) ;
65- }
40+ var visualizerOptions = new VisualizerOptions (
41+ skipSystem : nonsystem . HasValue ( ) ,
42+ onlyConflicts : ! all . HasValue ( ) ,
43+ referencedStartsWith : referencedStartsWith . HasValue ( ) ? referencedStartsWith . Value ( ) : string . Empty
44+ ) ;
45+
46+ var consoleLogger = new ConsoleLogger ( ! silent . HasValue ( ) ) ;
47+
48+ var finalResult = GetFileList ( directoryOrFile , includeSubDirectories , consoleLogger )
49+ . Bind ( x => GetAppDomainWithBindingRedirects ( configurationFile )
50+ . Map ( appDomain => DependencyAnalyzer . Analyze (
51+ x . FileList ,
52+ appDomain ,
53+ consoleLogger ,
54+ visualizerOptions ,
55+ x . RootFileName ) ) )
56+ . Map ( result => RunVisualizers ( result , consoleLogger , visualizerOptions ) )
57+ . Bind ( FailOnMissingAssemblies ) ;
58+
59+ switch ( finalResult )
60+ {
61+ case Failure < bool > fail :
62+ consoleLogger . LogError ( fail . Message ) ;
63+ return - 1 ;
64+ case Success < bool > succeed :
65+ return 0 ;
66+ default :
67+ throw new InvalidOperationException ( "Unexpected result type" ) ;
68+ }
6669
67- DependencyAnalyzerResult RunVisualizers ( DependencyAnalyzerResult dependencyAnalyzerResult , ILogger logger , VisualizerOptions options )
68- {
69- foreach ( var visualizer in dependencyVisualizers . Where ( x => x . IsConfigured ( ) ) )
70+ DependencyAnalyzerResult RunVisualizers ( DependencyAnalyzerResult dependencyAnalyzerResult , ILogger logger , VisualizerOptions options )
7071 {
71- visualizer . Visualize ( dependencyAnalyzerResult , logger , options ) ;
72+ foreach ( var visualizer in dependencyVisualizers . Where ( x => x . IsConfigured ( ) ) )
73+ {
74+ visualizer . Visualize ( dependencyAnalyzerResult , logger , options ) ;
75+ }
76+ return dependencyAnalyzerResult ;
7277 }
73- return dependencyAnalyzerResult ;
74- }
7578
76- Result < bool > FailOnMissingAssemblies ( DependencyAnalyzerResult dependencyAnalyzerResult )
77- => failOnMissing . HasValue ( ) && dependencyAnalyzerResult . MissingAssemblies . Any ( ) ? "Missing Assemblies" : Result < bool > . Succeed ( true ) ;
79+ Result < bool > FailOnMissingAssemblies ( DependencyAnalyzerResult dependencyAnalyzerResult )
80+ => failOnMissing . HasValue ( ) && dependencyAnalyzerResult . MissingAssemblies . Any ( )
81+ ? "Missing Assemblies"
82+ : Result < bool > . Succeed ( true ) ;
83+ }
84+ catch ( Exception exception )
85+ {
86+ Console . WriteLine ( exception . ToString ( ) ) ;
87+ return - 1 ;
88+ }
7889 } ) ;
7990
8091 try
@@ -99,27 +110,32 @@ Result<bool> FailOnMissingAssemblies(DependencyAnalyzerResult dependencyAnalyzer
99110 }
100111 }
101112
102- private static Result < List < FileInfo > > GetFileList ( CommandArgument directoryOrFile , CommandOption includeSubDirectories , ILogger logger )
113+ private static Result < ( List < FileInfo > FileList , string RootFileName ) > GetFileList ( CommandArgument directoryOrFile , CommandOption includeSubDirectories , ILogger logger )
103114 {
104115 var searchPattern = includeSubDirectories . HasValue ( ) ? SearchOption . AllDirectories : SearchOption . TopDirectoryOnly ;
105116 var directoryOrFilePath = directoryOrFile . Value ;
106- var directoryPath = Path . GetDirectoryName ( directoryOrFilePath ) ;
117+ var directoryPath = directoryOrFilePath ;
107118
108119 if ( ! File . Exists ( directoryOrFilePath ) && ! Directory . Exists ( directoryOrFilePath ) )
109120 {
110121 return ( string . Format ( CultureInfo . InvariantCulture , "Directory or file: '{0}' does not exist." , directoryOrFilePath ) ) ;
111122 }
112123
124+ var rootFileName = "" ;
113125 if ( File . Exists ( directoryOrFilePath ) )
114126 {
115- var fileName = Path . GetFileName ( directoryOrFilePath ) ;
116- logger . LogMessage ( $ "Root assembly specified: '{ fileName } '") ;
127+ rootFileName = Path . GetFileName ( directoryOrFilePath ) ;
128+ logger . LogMessage ( $ "Root assembly specified: '{ rootFileName } '") ;
129+ directoryPath = Path . GetDirectoryName ( directoryOrFilePath ) ;
117130 }
118131
119132 var directoryInfo = new DirectoryInfo ( directoryPath ) ;
120133
121134 logger . LogMessage ( $ "Checking for local assemblies in: '{ directoryInfo } ', { searchPattern } ") ;
122- return directoryInfo . GetFiles ( "*.dll" , searchPattern ) . Concat ( directoryInfo . GetFiles ( "*.exe" , searchPattern ) ) . ToList ( ) ;
135+
136+ var fileList = directoryInfo . GetFiles ( "*.dll" , searchPattern ) . Concat ( directoryInfo . GetFiles ( "*.exe" , searchPattern ) ) . ToList ( ) ;
137+
138+ return ( fileList , rootFileName ) ;
123139 }
124140
125141 public static Result < AppDomain > GetAppDomainWithBindingRedirects ( CommandOption configurationFile )
@@ -147,6 +163,7 @@ public static Result<AppDomain> GetAppDomainWithBindingRedirects(CommandOption c
147163 private static IDependencyVisualizer [ ] GetDependencyVisualizers ( ) => new IDependencyVisualizer [ ]
148164 {
149165 new ConsoleVisualizer ( ) ,
166+ new ConsoleTreeVisualizer ( ) ,
150167 new DgmlExport ( ) ,
151168 new XmlExport ( ) ,
152169 new DotExport ( ) ,
0 commit comments