public RuleResult CheckAssembly (AssemblyDefinition assembly) { // assembly must have an entry point to be examined MethodDefinition entry_point = assembly.EntryPoint; if (entry_point == null) return RuleResult.DoesNotApply; // RULE APPLIES // we have to check declaringType's visibility so // if we can't get access to it (is this possible?) we abandon // also, if it is not public, we don't have to continue our work // - we can't reach Main () anyways TypeDefinition type = entry_point.DeclaringType.Resolve (); if (type == null || !type.IsPublic) return RuleResult.Success; // at last, if Main () is not public, then it's okay if (!entry_point.IsPublic) return RuleResult.Success; if (assembly.References (VisualBasic)) { Runner.Report (type, Severity.Medium, Confidence.High, "Reduce class or module visibility (from public)."); } else { Runner.Report (entry_point, Severity.Medium, Confidence.Total, "Change method visibility to private or internal."); } return RuleResult.Failure; }
private static bool CanHasLinq(AssemblyDefinition assembly) { if (assembly.MainModule.Runtime < TargetRuntime.Net_2_0) return false; return assembly.References ("System.Core"); }