1
+ using System ;
1
2
using System . Collections . Generic ;
2
3
using System . IO ;
3
4
using System . Linq ;
@@ -17,6 +18,8 @@ IAnalyzerResult AnalyzeProject(string projectFilePath,
17
18
string targetFramework ,
18
19
string msBuildPath = null ) ;
19
20
IAnalyzerManager GetAnalyzerManager ( string solutionFilePath = null ) ;
21
+
22
+ IAnalyzerResult GetAnalyzerResult ( IAnalyzerResults results , string targetFramework ) ;
20
23
}
21
24
22
25
/// <summary>
@@ -51,8 +54,7 @@ public IAnalyzerResult AnalyzeProject(string projectFilePath,
51
54
string msBuildPath = null )
52
55
{
53
56
_logger . LogDebug ( "Analyzing project file {0}" , projectFilePath ) ;
54
- var analyzerResult = GetProjectInfo ( projectFilePath , solutionFilePath , targetFramework ) ;
55
- LogAnalyzerResult ( analyzerResult ) ;
57
+ var analyzerResult = GetAnalyzerResult ( GetAnalyzerManager ( solutionFilePath ) . GetProject ( projectFilePath ) . Build ( ) , targetFramework ) ;
56
58
57
59
if ( analyzerResult . Succeeded )
58
60
{
@@ -63,28 +65,21 @@ public IAnalyzerResult AnalyzeProject(string projectFilePath,
63
65
// buildalyzer failed to find restored packages, retry after nuget restore
64
66
_logger . LogDebug ( "Project analyzer result not successful, restoring packages" ) ;
65
67
_nugetRestoreProcess . RestorePackages ( solutionFilePath , msBuildPath ) ;
66
- analyzerResult = GetProjectInfo ( projectFilePath , solutionFilePath , targetFramework ) ;
67
- }
68
- else
69
- {
70
- // buildalyzer failed, but seems to work anyway.
71
- _logger . LogDebug ( "Project analyzer result not successful" ) ;
68
+ analyzerResult = GetAnalyzerResult ( GetAnalyzerManager ( solutionFilePath ) . GetProject ( projectFilePath ) . Build ( ) , targetFramework ) ;
72
69
}
73
70
74
71
return analyzerResult ;
75
72
}
76
73
77
- /// <summary>
78
- /// Checks if project info is already present in solution projects. If not, analyze here.
79
- /// </summary>
80
- /// <returns></returns>
81
- private IAnalyzerResult GetProjectInfo (
82
- string projectFilePath ,
83
- string solutionFilePath ,
84
- string targetFramework )
74
+ public IAnalyzerResult GetAnalyzerResult ( IAnalyzerResults results , string targetFramework )
85
75
{
86
- var analyzerResults = GetAnalyzerManager ( solutionFilePath ) . GetProject ( projectFilePath ) . Build ( ) ;
87
- return SelectAnalyzerResult ( analyzerResults , targetFramework ) ;
76
+ var result = SelectAnalyzerResult ( results , targetFramework ) ;
77
+ if ( ! result . Succeeded )
78
+ {
79
+ _logger . LogDebug ( "Project analyzer result not successful" ) ;
80
+ }
81
+ LogAnalyzerResult ( result ) ;
82
+ return result ;
88
83
}
89
84
90
85
private IAnalyzerResult SelectAnalyzerResult ( IAnalyzerResults analyzerResults , string targetFramework )
@@ -119,27 +114,36 @@ private IAnalyzerResult SelectAnalyzerResult(IAnalyzerResults analyzerResults, s
119
114
return firstAnalyzerResult ;
120
115
}
121
116
117
+ private static readonly HashSet < string > ImportantProperties = new ( ) { "Configuration" , "Platform" , "AssemblyName" , "Configurations" } ;
118
+
122
119
private void LogAnalyzerResult ( IAnalyzerResult analyzerResult )
123
120
{
124
121
// dump all properties as it can help diagnosing build issues for user project.
125
122
_logger . LogTrace ( "**** Buildalyzer result ****" ) ;
126
123
127
124
_logger . LogTrace ( "Project: {0}" , analyzerResult . ProjectFilePath ) ;
128
125
_logger . LogTrace ( "TargetFramework: {0}" , analyzerResult . TargetFramework ) ;
126
+ _logger . LogTrace ( "Succeeded: {0}" , analyzerResult . Succeeded ) ;
129
127
130
- foreach ( var property in analyzerResult ? . Properties ?? new Dictionary < string , string > ( ) )
128
+ var properties = analyzerResult ? . Properties ?? new Dictionary < string , string > ( ) ;
129
+ foreach ( var property in ImportantProperties )
131
130
{
132
- _logger . LogTrace ( "Property {0}={1}" , property . Key , property . Value ) ;
131
+ _logger . LogTrace ( "Property {0}={1}" , property , properties . GetValueOrDefault ( property ) ?? "'undefined'" ) ;
133
132
}
134
133
foreach ( var sourceFile in analyzerResult ? . SourceFiles ?? Enumerable . Empty < string > ( ) )
135
134
{
136
135
_logger . LogTrace ( "SourceFile {0}" , sourceFile ) ;
137
136
}
138
137
foreach ( var reference in analyzerResult ? . References ?? Enumerable . Empty < string > ( ) )
139
138
{
140
- _logger . LogTrace ( "References: {0}" , reference ) ;
139
+ _logger . LogTrace ( "References: {0} (in {1})" , Path . GetFileName ( reference ) , Path . GetDirectoryName ( reference ) ) ;
140
+ }
141
+
142
+ foreach ( var property in properties )
143
+ {
144
+ if ( ImportantProperties . Contains ( property . Key ) ) continue ; // already logged
145
+ _logger . LogTrace ( "Property {0}={1}" , property . Key , property . Value . Replace ( Environment . NewLine , "\\ n" ) ) ;
141
146
}
142
- _logger . LogTrace ( "Succeeded: {0}" , analyzerResult . Succeeded ) ;
143
147
144
148
_logger . LogTrace ( "**** Buildalyzer result ****" ) ;
145
149
}
0 commit comments