1313// ----------------------------------------------------------------------------------
1414
1515using System ;
16+ using System . CodeDom ;
1617using System . Collections . Generic ;
1718using System . Diagnostics ;
1819using System . IO ;
@@ -26,6 +27,21 @@ namespace StaticAnalysis.DependencyAnalyzer
2627 /// </summary>
2728 public class DependencyAnalyzer : IStaticAnalyzer
2829 {
30+ const int NoAssemblyVersionEvidence = 1000 ;
31+ const int ReferenceDoesNotMatchAssemblyVersion = 1010 ;
32+ const int ExtraAssemblyRecord = 2000 ;
33+ const int MissingAssemblyRecord = 3000 ;
34+ const int AssemblyVersionFileVersionMismatch = 7000 ;
35+ const int CommonAuthenticationMismatch = 7010 ;
36+
37+ static List < string > FrameworkAssemblies = new List < string >
38+ {
39+ "Microsoft.CSharp" ,
40+ "Microsoft.Management.Infrastructure" ,
41+ "Microsoft.Build" ,
42+ "Microsoft.Build.Framework"
43+ } ;
44+
2945 private Dictionary < string , AssemblyRecord > _assemblies =
3046 new Dictionary < string , AssemblyRecord > ( StringComparer . OrdinalIgnoreCase ) ;
3147 private Dictionary < AssemblyName , AssemblyRecord > _sharedAssemblyReferences =
@@ -130,6 +146,7 @@ private bool AddSharedAssembly(AssemblyRecord assembly)
130146 } ,
131147 AssemblyVersion = assembly . Version ,
132148 Severity = 0 ,
149+ ProblemId = AssemblyVersionFileVersionMismatch ,
133150 Description = "Shared assembly conflict, shared assemblies with the same assembly " +
134151 "version have differing file versions" ,
135152 Remediation = string . Format ( "Update the assembly reference for {0} in one of the " +
@@ -170,6 +187,7 @@ private bool AddSharedAssemblyExactVersion(AssemblyRecord record)
170187 AssemblyName = record . Name ,
171188 AssemblyVersion = record . Version ,
172189 Severity = 0 ,
190+ ProblemId = CommonAuthenticationMismatch ,
173191 AssemblyPathsAndFileVersions = new List < Tuple < string , Version > > ( )
174192 {
175193 new Tuple < string , Version > ( record . Location , new Version ( record . AssemblyFileMajorVersion ,
@@ -202,14 +220,15 @@ private static bool RequiresExactVersionMatch(AssemblyRecord name)
202220
203221 private static bool IsFrameworkAssembly ( AssemblyName name )
204222 {
205- return name . Name . StartsWith ( "System" ) || name . Name . Equals ( "mscorlib" ) ;
223+ return name . Name . StartsWith ( "System" ) || name . Name . Equals ( "mscorlib" )
224+ || FrameworkAssemblies . Contains ( name . Name ) ;
206225 }
207226
208227 private void ProcessDirectory ( string directoryPath )
209228 {
210229 var savedDirectory = Directory . GetCurrentDirectory ( ) ;
211230 Directory . SetCurrentDirectory ( directoryPath ) ;
212- _loader = AppDomainHelpers . CreateProxy < AssemblyLoader > ( directoryPath , out _testDomain ) ;
231+ _loader = EnvironmentHelpers . CreateProxy < AssemblyLoader > ( directoryPath , out _testDomain ) ;
213232 foreach ( var file in Directory . GetFiles ( directoryPath ) . Where ( file => file . EndsWith ( ".dll" ) ) )
214233 {
215234 AssemblyRecord assembly = CreateAssemblyRecord ( file ) ;
@@ -258,6 +277,7 @@ var assembly in
258277 {
259278 AssemblyName = assembly . Name ,
260279 Severity = 2 ,
280+ ProblemId = ExtraAssemblyRecord ,
261281 Description = string . Format ( "Assembly {0} is not referenced from any cmdlets assembly" ,
262282 assembly . Name ) ,
263283 Remediation = string . Format ( "Remove assembly {0} from the project and regenerate the Wix " +
@@ -286,6 +306,7 @@ private void CheckAssemblyReference(AssemblyName reference, AssemblyRecord paren
286306 ActualVersion = stored . Version ,
287307 ExpectedVersion = reference . Version ,
288308 ParentAssembly = parent . Name ,
309+ ProblemId = NoAssemblyVersionEvidence ,
289310 Severity = 2 ,
290311 Description = string . Format ( "Assembly {0} referenced from {1}.dll does not specify any " +
291312 "assembly version evidence. The assembly will use version " +
@@ -304,6 +325,7 @@ private void CheckAssemblyReference(AssemblyName reference, AssemblyRecord paren
304325 ActualVersion = stored . Version ,
305326 ExpectedVersion = reference . Version ,
306327 ParentAssembly = parent . Name ,
328+ ProblemId = ReferenceDoesNotMatchAssemblyVersion ,
307329 Severity = 1 ,
308330 Description = string . Format ( "Assembly {0} version {1} referenced from {2}.dll does " +
309331 "not match assembly version on disk: {3}" ,
@@ -321,6 +343,7 @@ private void CheckAssemblyReference(AssemblyName reference, AssemblyRecord paren
321343 AssemblyVersion = reference . Version . ToString ( ) ,
322344 ReferencingAssembly = parent . Name ,
323345 Severity = 0 ,
346+ ProblemId = MissingAssemblyRecord ,
324347 Description = string . Format ( "Missing assembly {0} referenced from {1}" , reference . Name ,
325348 parent . Name ) ,
326349 Remediation = "Ensure that the assembly is included in the Wix file or directory"
0 commit comments