public virtual void Visualize() { if (_analyzerResult.AnalyzedFiles.Count <= 0) { Console.WriteLine(AsmSpy_CommandLine.No_assemblies_files_found_in_directory); return; } if (OnlyConflicts) { Console.WriteLine(AsmSpy_CommandLine.Detailing_only_conflicting_assembly_references); } var assemblyGroups = _analyzerResult.Assemblies.Values.GroupBy(x => x.RedirectedAssemblyName); foreach (var assemblyGroup in assemblyGroups.OrderBy(i => i.Key.Name)) { if (SkipSystem && AssemblyInformationProvider.IsSystemAssembly(assemblyGroup.Key)) { continue; } var assemblyInfos = assemblyGroup.OrderBy(x => x.AssemblyName.Name).ToList(); if (OnlyConflicts && assemblyInfos.Count <= 1) { if (assemblyInfos.Count == 1 && assemblyInfos[0].AssemblySource == AssemblySource.Local) { continue; } if (assemblyInfos.Count <= 0) { continue; } } var referenced = assemblyInfos.SelectMany(x => x.ReferencedBy).GroupBy( x => x.AssemblyName.Name).Where(x => x.Key.ToUpperInvariant().StartsWith(ReferencedStartsWith.ToUpperInvariant(), StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(ReferencedStartsWith) && !referenced.Any()) { continue; } Console.ForegroundColor = ConsoleColor.White; Console.Write(AsmSpy_CommandLine.Reference); Console.ForegroundColor = GetMainNameColor(assemblyInfos); Console.WriteLine(AsmSpy_CommandLine.ConsoleVisualizer_Visualize__0_, assemblyGroup.Key); foreach (var assemblyInfo in assemblyInfos) { VisualizeAssemblyReferenceInfo(assemblyInfo); } Console.WriteLine(); } Console.ResetColor(); }
/// <summary> /// Get the <see cref="IOptions{TOptions}"/> for the <see cref="DatabaseConfiguration"/> /// </summary> /// <returns>The <see cref="IOptions{TOptions}"/> for the <see cref="DatabaseConfiguration"/></returns> public static IOptions <DatabaseConfiguration> GetDbContextOptions() { var builder = new ConfigurationBuilder(); var assemblyInfoProvider = new AssemblyInformationProvider(); var ioManager = new DefaultIOManager(); builder.SetBasePath(ioManager.GetDirectoryName(assemblyInfoProvider.Path)); builder.AddJsonFile(RootJson); builder.AddJsonFile(DevJson); var configuration = builder.Build(); return(Options.Create(configuration.GetSection(DatabaseConfiguration.Section).Get <DatabaseConfiguration>())); }
private void WriteAssemblies(XmlWriter writer, DependencyAnalyzerResult result, VisualizerOptions visualizerOptions) { writer.WriteStartElement("Assemblies"); var assemblyGroups = result.Assemblies.Values.GroupBy(x => x.RedirectedAssemblyName); foreach (var assemblyGroup in assemblyGroups.OrderBy(i => i.Key.Name)) { if (visualizerOptions.SkipSystem && AssemblyInformationProvider.IsSystemAssembly(assemblyGroup.Key)) { continue; } var assemblyInfos = assemblyGroup.OrderBy(x => x.AssemblyName.Name).ToList(); if (visualizerOptions.OnlyConflicts && assemblyInfos.Count <= 1) { if (assemblyInfos.Count == 1 && assemblyInfos[0].AssemblySource == AssemblySource.Local) { continue; } if (assemblyInfos.Count <= 0) { continue; } } // Got any references? Respect the user's choices here. var referenced = assemblyInfos.SelectMany(x => x.ReferencedBy) .GroupBy(x => x.AssemblyName.Name) .Where(x => x.Key.ToUpperInvariant().StartsWith(visualizerOptions.ReferencedStartsWith.ToUpperInvariant(), StringComparison.OrdinalIgnoreCase)); if (!string.IsNullOrEmpty(visualizerOptions.ReferencedStartsWith) && !referenced.Any()) { continue; } using (writer.WriteElementScope("Assembly")) { writer.WriteAttributeString("Name", assemblyGroup.Key.Name); writer.WriteAttributeString("Version", assemblyGroup.Key.Version.ToString()); writer.WriteAttributeString("FullName", assemblyGroup.Key.FullName); foreach (var assemblyInfo in assemblyInfos) { using (writer.WriteElementScope("Reference")) { writer.WriteAttributeString("Source", assemblyInfo.AssemblySource.ToString()); if (assemblyInfo.AssemblySource != AssemblySource.NotFound) { writer.WriteAttributeString("Location", assemblyInfo.ReflectionOnlyAssembly.Location); } foreach (var referer in assemblyInfo.ReferencedBy.OrderBy(x => x.AssemblyName.ToString())) { // Skip this referer? Respect the user's choices here. if (!string.IsNullOrEmpty(visualizerOptions.ReferencedStartsWith)) { if (!referer.AssemblyName.Name.ToUpperInvariant().StartsWith(visualizerOptions.ReferencedStartsWith.ToUpperInvariant(), StringComparison.OrdinalIgnoreCase)) { continue; } } using (writer.WriteElementScope("Referer")) { writer.WriteAttributeString("Name", referer.AssemblyName.Name); writer.WriteAttributeString("Version", referer.AssemblyName.Version.ToString()); writer.WriteAttributeString("FullName", referer.AssemblyName.FullName); } } } } } } writer.WriteEndElement(); }
public static XmlDocument Generate(IDependencyAnalyzerResult result, bool skipSystem) { var document = new XmlDocument(); document.LoadXml(@" <runtime> <assemblyBinding xmlns=""urn: schemas - microsoft - com:asm.v1""> </assemblyBinding> </runtime>"); var assemblyGroups = result.Assemblies.Values.GroupBy(x => x.AssemblyName); foreach (var assemblyGroup in assemblyGroups.OrderBy(i => i.Key.Name)) { if (skipSystem && AssemblyInformationProvider.IsSystemAssembly(assemblyGroup.Key)) { continue; } var assemblyInfos = assemblyGroup.OrderBy(x => x.AssemblyName.ToString()).ToList(); if (assemblyInfos.Count <= 1) { if (assemblyInfos.Count == 1 && assemblyInfos[0].AssemblySource == AssemblySource.Local) { continue; } if (assemblyInfos.Count <= 0) { continue; } } var sortedAssemblies = assemblyInfos.OrderByDescending(a => a.AssemblyName.Version).ToList(); var highestAssemblyVersion = sortedAssemblies.Select(a => a.AssemblyName).First().Version; var lowestAssemblyVersion = sortedAssemblies.Select(a => a.AssemblyName).Last().Version; var assemblyToUse = sortedAssemblies.FirstOrDefault(a => a.AssemblySource != AssemblySource.NotFound)?.AssemblyName; if (assemblyToUse == null) { continue; } var depedententAssembly = document.CreateElement("dependentAssembly"); // <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" /> // <bindingRedirect oldVersion="0.0.0.0-2.1.2.4000" newVersion="2.1.2.4000" /> var assemblyIdentity = document.CreateElement("assemblyIdentity"); assemblyIdentity.SetAttribute("name", assemblyToUse.Name); var publicKeyToken = GetPublicKeyTokenFromAssembly(assemblyToUse); if (publicKeyToken != null) { assemblyIdentity.SetAttribute("publicKeyToken", publicKeyToken); } var cultureName = assemblyToUse.CultureName; assemblyIdentity.SetAttribute("culture", string.IsNullOrEmpty(cultureName) ? "neutral" : cultureName); depedententAssembly.AppendChild(assemblyIdentity); var bindingRedirect = document.CreateElement("bindingRedirect"); bindingRedirect.SetAttribute("oldVersion", Invariant($"{lowestAssemblyVersion}-{highestAssemblyVersion}")); bindingRedirect.SetAttribute("newVersion", assemblyToUse.Version.ToString()); depedententAssembly.AppendChild(bindingRedirect); document.DocumentElement.FirstChild.AppendChild(depedententAssembly); } return(document); }