NDepend Release Notes
Major milestones
14th November 2024 | 2024.2.1 | Analysis can run on .NET 9, Cobertura, Bugs fixed |
10th October 2024 | 2024.2.0 | Report Improved, R# Code Inspection's Issues Import, .NET 9, C# 13 |
11th June 2024 | 2024.1.1 | Improvements and Bugs fixed |
25th March 2024 | 2024.1.0 | Roslyn Analyzers Import, Improved Report |
7th December 2023 | 2023.2.3 | Bug fixed |
23rd November 2023 | 2023.2.2 | Analysis can run on .NET 8, Bugs fixed |
18th October 2023 | 2023.2.1 | Bugs fixed |
16th October 2023 | 2023.2.0 | Report Redesigned, Issue Explanation, .NET 8, C# 12 |
2nd October 2023 | 2023.1.2 | Bug fixed |
19th June 2023 | 2023.1.1 | Bugs fixed |
7th March 2023 | 2023.1.0 | Important Usability and Code Model improvements |
10th November 2022 | 2022.2.1 | VS 2022 ARM, run on net7.0, Bugs fixed |
17th October 2022 | 2022.2.0 | GitHub Action, .NET 7, C#11 |
10th June 2022 | 2022.1.4 | Bugs fixed |
12th May 2022 | 2022.1.3 | Bugs fixed |
21th April 2022 | 2022.1.2 | Improvements, Bugs fixed |
1st April 2022 | 2022.1.1 | .runsettings file support, Improvements, Bugs fixed |
16th March 2022 | 2022.1.0 | Report Improvements, ILSpy Integration, VS2022 Theming... |
16th December 2021 | 2021.2.5 | Improvements, Bugs fixed |
25th November 2021 | 2021.2.4 | Improvements, Bugs fixed |
22th November 2021 | 2021.2.3 | Bugs fixed |
15th November 2021 | 2021.2.2 | Bugs fixed |
8th November 2021 | 2021.2.1 | Console improvements, bugs fixed |
20th October 2021 | 2021.2.0 | MacOS, Linux, VS2022, .NET 6.0 |
28th January 2021 | 2021.1.0 | Xamarin, Unity, UWP, NCrunch support and more |
25th November 2020 | 2020.2.1 | Bug fixes |
8th October 2020 | 2020.2.0 | .NET 5.0, C#9, Blazor support |
20th April 2020 | 2020.1.0 | Graph rebuilt, AzureDevOps extension improvements, Bug fixes |
14th October 2019 | 2019.3.0 | Improved baseline experience, Bug fixes |
14th March 2019 | 2019.2.0 | Support for VS2019 and .NET Core 3.0 |
31th January 2019 | 2019.1.0 | Support for VS sln analysis, OpenCover, VS coverage binary |
11th September 2018 | 2018.2.0 | Issue suppression, Deferred VS2017 Extension Loading |
7th March 2018 | 2018.1.0 | Dark Theme support, DDD, Less false positive |
4th October 2017 | 2017.3.0 | .NET Core 2.0 support, NuGet support, Less false positive |
21th April 2017 | 2017.2.0 | Improved Integration and Diagram |
20th January 2017 | 2017.1.0 | Technical debt estimation, Quality gates, Issues management |
29th April 2016 | 6.3.0 | Improvements and bug fixes |
2nd December 2015 | 6.2.0 | Improvements and bug fixes |
8th June 2015 | 6.0.0 | Integration, Rule File, Colored metrics |
1st August 2014 | 5.4.0 | Enhanced WinRT support |
29th January 2014 | 5.2.0 | Paths support relifted |
26th September 2013 | 5.0.0 | Dashboard, Trending, UI Relift |
23th May 2012 | 4.0.0 | CQLinq, NDepend.API, Power Tools |
24th November 2010 | 3.5.0 | Enhanced reports |
15th February 2010 | 3.0.0 | Full Visual Studio integration |
27th March 2009 | 2.12.0 | Interactive search based on CQL |
1st December 2008 | 2.11.0 | Major performance improvement |
9th September 2008 | 2.10.0 | Support for interactive graph |
8th April 2008 | 2.8.0 | Support for Code Coverage data importing |
10th December 2007 | 2.6.0 | Major ergonomy improvement |
16th July 2007 | 2.3.0 | Shallow integration with Visual Studio and Reflector |
2nd May 2007 | 2.2.0 | Support for Side-Effects detection |
28th March 2007 | 2.1.0 | Support for Code Diff |
1st February 2007 | 2.0.4 RTM | First public professional release |
13th December 2006 | 2.0.3 RC1 | Support for interactive dependency matrix |
4th April 2006 | 2.0.1 Beta1 | First v2 beta introducing CQL and interactive treemap |
26th April 2004 | 1.0.0 | First public release (OSS) |
Version 2024.2.1
Released on the 14th of November 2024
Improvements
- The NDepend analysis & reporting on Windows / Linux / Mac can now run on .NET 9.0.
- Cobertura coverage format is now supported to import coverage files. This format can be used in Azure DevOps and Coverlet.
- New button when right clicking a Project in Start Page : "Open Most Recent Web Report"
- Beyond Compare 5 added in diff tools.
- Source file page in report now have title and C# or VB icon.
3 Bugs Fixed
- Report compressed might not be loaded in Team City.
- Report compressed in history directory might not be openable.
- Adding one or several assemblies in Project Properties > Code to Analyze might not provoque enable of the button Save Project' and 'Cancel Changes.
Version 2024.2.0
Released on the 10th of October 2024
Report Improved
- Dark mode. New button to switch between light and dark mode.
- An enlarge button allows the data grid displaying the list of source files to expand and fill the full width.
- Logs tab now have buttons to select errors warnings or messages.
- The code coverage pie chart has been vectorized.
- Data grid pagination is now managed through checkboxes instead of a combo box and displays the number of items.
Full .NET 9.0 support
All .NET 9.0 project's kinds can now be analyzed:
- ASP.NET Core
- Windows Desktop
- Blazor
- Console
C# 13 support
NDepend can now parse new C# 13 language constructs including:
- New params collections
- New escape sequence \e.
- allow ref struct generic constraint
- Partial properties and indexers
ReSharper Code Inspections' Issues Import
- Issues from any ReSharper Code Inspections can now be imported by NDepend at analysis time.
- ReSharper Code Inspections's are listed in the report Rules tab.
- When comparing against a baseline, NDepend determines which ReSharper Code Inspections's issue is new, unresolved or fixed since the baseline
- ReSharper Code Inspections's are now also listed in the UI Queries and Rules Explorer
Fewer False Positives
- The notmycode queries Discard generated Namespaces from JustMyCode and the rules Avoid types initialization cycles and Avoid namespaces mutually dependent now don't match anymore code elements generated by PostSharp.
- The notmycode query Discard generated Types from JustMyCode now excludes types generated by the compiler for collections with names ending in z__ReadOnlyArray<T>.
- Unused constructor defined in an internal class implenting one or several interfaces might be used by Dependency Injection and is no longer regarded as dead code.
- Unused methods are no longer regarded as dead code when tagged with UnityEngine.RuntimeInitializeOnLoadMethodAttribute or UnityEngine.InitializeOnLoadMethodAttribute.
- Unused methods are no longer regarded as dead code when tagged with UnityEngine.RuntimeInitializeOnLoadMethodAttribute or UnityEngine.InitializeOnLoadMethodAttribute.
- Unused types are no longer considered dead code when tagged with UnityEngine.RuntimeInitializeOnLoadAttribute and UnityEngine.InitializeOnLoadAttribute.
- Unused types are no longer seen as dead code when they derive from UnityEditor.AssetPostprocessor.
- Unused static classes are not classified as dead code if any of their methods are tagged with UnityEditor.MenuItemAttribute.
- Unused types are not considered dead code if any of their methods or properties are tagged with JetBrains.Annotations.UsedImplicitlyAttribute.
- Unused methods are not treated as dead code when their parent type is tagged with DebuggerDisplayAttribute, which may use the method in its expression.
Others Improvements
- Now NDepend can resolve an assembly to analyze from a complex expression in .csproj that looks like:
<AssemblyName>Prefix.$(MSBuildProjectName.Replace(".","").Replace("-","_").Suffix</AssemblyName>
- Import Roslyn Analyzer's issues with no message, with a default message "no message available".
- New informational logs now display the number of issues found in each parsed SARIF file.
- New API method in the class NDepend.Project.ExtensionMethodsProject:
public static IController GetRulesInProjectFileAndInRuleFilesAndDeclaredInSourceCodeAndImported( this IProject project, IAnalysisResult analysisResult);
14 Bugs Fixed
- When running analysis and building a report on projects containing Roslyn Analyzers with unconventional names like xUnit2024, a KeyNotFoundException could be thrown.
- In the report Issues tab, when choosing to show only source files with issues, source files with only fixed issues were selected.
- In the report Issues tab, the number of source files with no issues in the green label might be wrong when choosing to show only source files with issues.
- In the report source code, when an issue is on the first line, it was shown above the second line. Now it is shown above the first line.
- In the report, the declaration of a removed code element is not available anymore because clicking such a link led to a 404 error, as the baseline version of the file is not available in the report.
- When running an analysis through NDepend.Console.exe, if the NDepend project file is a relative path, it is relative to Environment.CurrentDirectory. In rare cases, Environment.CurrentDirectory throws an exception. In this situation, the exception is now caught, and a proper error message is shown to the user.
- Exporting trend charts from the UI dashboard might not work in certain situations.
- The rule ND2700 Float and Date Parsing must be culture aware explanation did not properly display the method that shouldnt be called.
- An IndexOutOfRangeException could be thrown when parsing a C# source file with a generic record struct declared at the end of the file.
- In complex scenarios, when issues of a rule are spread across several source files with the same name, an ArgumentException could be thrown.
- When selecting a row in the query result and typing a key, very rarely an InvalidOperationException could be thrown.
- When checking the NDepend product installation, rarely an UnauthorizedAccessException could be thrown.
- When using special
<AssemblyName></AssemblyName>
tags in .csproj files containing characters like a double quote, an ArgumentException could be thrown. - A NullReferenceException could be thrown when deleting a Group in the Rules Explorer.
Version 2024.1.1
Released on the 11th of June 2024
Improvements
- Improve heuristic to better pair Roslyn analyzers imported issues with their counterpart in the baseline, in complex scenarios.
- In the Directory.Build.props file used to output Roslyn Analyzer issues, add Condition="'$(SolutionDir)' != ''" to make sure MSBuild doesn't try to export Roslyn Analyzers issues to $(SolutionDir)\.sarif\$(MSBuildProjectName).json when a project doesn't have a solution.
- Path API improved with new Try methods that fails when the file or directory name in argument contains a forbidden character in path: TryGetChildFileWithName, TryGetChildDirectoryWithName, TryGetBrotherFileWithName, and TryGetBrotherDirectoryWithName
Bugs Fixed
- The command Project Properties > Analysis > Save As didn't work for a project loaded with no analysis result loaded.
- A KeyNotFoundException was thrown when builing a report over a code base with Rolsyn Analyzer whose name has more than 6 letters.
- Property IType.IsGeneratedByCompiler of types tagged with System.CodeDom.Compiler.GeneratedCodeAttribute, did return false, now it returns true.
- An ArgumentException could be thrown when a .csproj or .sln file parsed by NDepend contains a file or directory name with a forbidden character in path.
- Very rarely a NullReferenceException could be thrown when hovering the application while loading an analysis result.
- When sorting issues or code elements by their source files, a NullReferenceException could be thrown if no directory common to all elments declarations could be found.
- When an error happened at analysis time, the Error List might not contain the error details.
Version 2024.1.0
Released on the 25th of March 2024
Roslyn Analyzers' Issues Import
- Issues from any Roslyn Analyzer can now be imported by NDepend at analysis time.
- Roslyn Analyzer's are listed in the report Rules tab.
- When comparing against a baseline, NDepend determines which Roslyn Analyzer's issue is new, unresolved or fixed since the baseline
- Roslyn Analyzer's are now also listed in the UI Queries and Rules Explorer
New Projects Tab in the Report
- The report contains a new Projects tab that lists projects of the analyzed application.
- For each project some metrics are displayed.
- Clicking a project in the Project's list let's filter only its source files in the source files datagrid under the Issues tab.
Other Improvements
- Support for the new <UseArtifactsOutput> tag usable in Directory.Build.props files. This way NDepend can automatically resolve assemblies in the directory /artifacts/bin.
- Rules and Roslyn Analyzers Ids (like ND1234 or CA1234) are now mentionned everywhere when it is relevant, in the report and in the UI.
- The report's overall usability and design have been enhanced through dozens of minor improvements.
- New menus have been introduced to simplify the import of Roslyn Analyzers' issues and enhance the ease of working with the Report.
- Code has been refactored to reduce memory allocation by 30%, potentially leading to substantial performance improvements, especially on machines with limited RAM
- Anti-aliasing is now applied to the boxes shown in the graph help panel.
Default Rules Set Improvement
- New Quality Gate Treat Compiler Warnings as Error.
- New Rule Nested class members should not mask outer class' static members.
- New Rule Exception classes should be declared as public
- The rule A stateless class or structure might be turned into a static type doesn't warn anymore on abstract stateless classes.
- The rules Review data adapters vulnerable to SQL injection and Review commands vulnerable to SQL injection now take account of both APIs 'Microsoft.Data.SqlClient' and 'System.Data.SqlClient'.
Bug Fixed
- In report, when the option Only list source files with issues and files added or modified since the baseline was set, in case there is no issue but some files were changed, the source files were incorrectly not listed.
- In the report, clicking a rule go to the screen containing the rule definition but might not scroll down to the rule definition.
- Very rarely an analysis result could not be loaded.
- If an issue description contained the character double quote " it might happen that the source file containing it wasn't displayed properly in report.
- Clicking the button Run on Baseline in the Query Edition panel could lead to twice the same Message Box when this action is not available
- Types generated for C#12 collection literals by the C# compiler were not seen as generated by the compiler.
- Very rarely, comparing two snapshots could throw a NullReferenceException.
- Very rarely, closing a session could throw a NullReferenceException.
- The notmycode query Discard generated Assemblies from JustMyCode has been improved to avoid matching some particular VB.NET assemblies.
Version 2023.2.3
Released on the 7th of November 2023
Bug Fixed
- A NullReferenceException could be raised when clicking the menu Explore Code Coverage while the metric view hasen't been shown yet.
Version 2023.2.2
Released on the 23rd of November 2023
- The NDepend analysis & reporting on Windows / Linux / Mac can now run on net8.0. net7.0 and net6.0 are still supported.
- Rider64.exe is now resolved in the new default path which looks like C:\Users\$(usr)\AppData\Local\Programs\Rider\bin\rider64.exe
Fewer False Positive
- The rule Avoid custom delegates avoids matching custom generic delegates that might make sense like Predicate<T1,T2>.
- The rule Avoid having different types with same name doesn't match anymore static classes with extension methods whose name is transparent to user code.
- The rule concerned with "Newtonsoft.Json" serialization now also takes account of "System.Text.Json".
Bugs Fixed
- In the report, the source code of interfaces containing non-abstract methods was not reported as covered (or not) by tests.
- The rule Methods should have a low C.R.A.P score could throw an InvalidOperationException on a method with null value for CylomaticComplexity
- The metric Cyclomatic Complexity might not be selectable in the Metric view if some assemblies with PDB and sources resolved contain only constants.
- A FormatException could be raised when analyzing assemblies with an incorrect version.
- When a report is generated through .NET Core analysis, the diagrams are not shown and the Overview panel height was too large. Now the Report Overview panel height adapts automatically if there is no diagram.
- In Project Properties > Code to Analyze, when many assemblies are referenced, when removing some assemblies the assemblies list could remain empty. Also, when adding assemblies the list could flicker.
- When analyzing .NET 2.0 assemblies generated with Delphi.NET, when loading the analysis result an AnalysisException could be thrown.
Version 2023.2.1
Released on the 18th of October 2023
Bugs Fixed
- The rule API Breaking Changes: Methods could return an override public method removed which is a false positive since it doesn't break client.
- In source files in the reports, when displayed through a web server the characters "…" could be shown instead of the character '…'
- Rarely an ArgumentOutOfRangeException could be thrown while comparing 2 snapshots.
Version 2023.2.0
Released on the 16th of October 2023
Report Redesigned for Maximum Insights
- Source files are now listed with a focus on regression since the baseline. The list contains visual cues and can be easily filtered and sorted.
- For each source file a comprehensive all-in-one view is provided:
- Issue Tracking: Identify new issues introduced since the baseline, as well as the status of unresolved and fixed issues.
- Clear Explanations: Each issue is accompanied by a plain English description, making it easy to understand, along with a smart technical debt estimation indicating the effort required for resolution.
- Differential View: If changes have been made, the source file is compared with its baseline version.
- Coverage Insight: If code coverage data is available during analysis, each C# statement is highlighted in green or red. Changes in coverage since the baseline are given special attention.
- Flexible Display: Each visual artifact can be enabled/disabled with just a single click.
- Tools: find in code, go to next/previous, copy to clipboard, zoom in/out, dark theme and additional information (project, path, metrics...) are provided.
- The report sections are now shown in tabs to improve the navigation.
- The rules summary in report has been improved with debt estimations, visual cues and search & filter tools.
- The user can easily navigate back and forth between a rule's explanation within the report, list of issues of a rule and for each issue, its location in source code.
- A new visual cue shows at a glance the quality gates status FAIL, WARN or PASS. The user can easily navigate from the quality gates status to their descriptions and root causes in source code.
- Trend charts are now more accessible thanks to the new Trend tab.
Full .NET 8.0 support
All .NET 8.0 project's kinds can now be analyzed:
- ASP.NET Core
- Windows Desktop
- Blazor
- Console
C# 12 support and C# parsing improvements
- C# 12 new features like primary constructor for class and inline arrays are supported .
- 100% of code elements declarations in source are resolved, including declarations of fields, enumeration values, abstract methods, delegates, events, record class, record struct and anonymous namespaces.
- The source declaration line of a concrete method is now the line that contains the method name, and not the line that contains the method body open brace character as it used to be. This makes reporting issues in source file clearer.
- Locate and parse all **\*.cs files for project from .csproj Visual Studio Project SDK.
- The Cyclomatic Complexity of a method is reduced by one for every call to a lambda, anonymous method or local function.
More with Less
Even though more information are packed into the redesigned report, the analysis process for generating it is now 40% quicker. Even for very large code bases with thousands of source files and millions of lines of code scanned, the report generation takes less than a minute on a modern hardware, and just a few seconds for regular code bases (2.000 classes or less).
NDependReport.html report file size is now divided by 2 thanks to new optimizations. It now ranges between one and 5MB ensuring easy sharing and streamlined usability.
Performance Improvements in the UI
- Loading the actual code base snapshot with the baseline snapshot is now parralelized which leads to 40% faster loading time.
- All panels are lazy initialized which makes UI instantly responsive once snapshot(s) have been loaded.
- Panel Project Properties > Code to Analyze is 41% faster to resolve all assemblies
Issue Explanation
In rules C# source code, you can now define a pattern for issue explanations, offering a new level of customization. Such pattern is now integrated into all default rules.
These issue explanations are displayed in both the NDepend UI and within the source code views in the report, enhancing your understanding and analysis capabilities.
Improvements
- Support for parsing Jetbrains DotCover ReportType DetailedXml to gather statements coverage highlights in the report.
- New properties on the interface ISourceFile: NbLines NbCharacters NbLinesOfComment CodeElements NbILInstructions NbLinesOfCode CoverageDataAvailable PercentageCoverage NbLinesOfCodeCovered NbLinesOfCodeNotCovered
- New trend metric # Line Feed. Also the Dashboard now lists # Line Feed and # Line Feed delta since the baseline.
- The Dashboard is now refreshed without flickering thanks to double buffering.
- In Project Properties > Code to Analyze, assemblies are now resolved from first to last which makes it more convenient for the user to track resolving.
- A visual cue is now shown on query result cells that are expandable.
Fewer False Positives
- If the same element was declared in several assemblies, its issues were duplicated for each occurrence. Not anymore.
- The notmycode query Discard generated Fields from JustMyCode now matches fields declared in generated source files.
- Discard generated Namespaces from JustMyCode now also matches AspNetCoreGeneratedDocument, namespaces with names like Microsoft.Maui.Controls that are generated by the MAUI infrastructure, and namespaces and anonymous namespaces that only contains types generated by the compiler.
- Discard generated Assemblies from JustMyCode now discards empty assemblies with no type, and assemblies with no C#, VB.NET, and F# code.
- Discard generated and designer Methods from JustMyCode now matches Razor markup methods declared in .cshtml source files.
- Discard generated Types from JustMyCode now matches Razor markup types declared in .cshtml source files and also matches interop types tagged with System.Runtime.InteropServices.TypeIdentifierAttribute.
- The rules Code should be tested and New Types and Methods should be tested now aggregate methods within their parent type when the type is 0% covered. This can lead to much fewer issues, and the overall estimated debt (effort to fix) remains constant since it is aggregated into the single issue on the parent type. Also, it doesn't match anymore refactored methods whose signature has been modified.
- The rule ND1603 doesn't match untested types anymore since they are caught by other rules. It has been renamed Assemblies and Namespaces should be tested.
- The rule Methods refactored should be tested could report some changes because of internal IL changes. Now it reports only source changes.
- Coverage-related rules now only report issues on the JustMyCode domain.
- The rule Namespace name should correspond to file location now emits only a single issue per the concerned namespace.
- The rule Avoid duplicating a type definition across assemblies now only takes account of types in the JustMyCode domain.
- Constructors of abstract classes should be declared as protected or private could match constructors declared as private protected.
- The rule Methods prefixed with 'Try' should return a boolean doesn't warn anymore on async methods that might return a Task
. - The rule Methods should be declared static if possible doesn't match anymore Razor methods named OnGet, OnPost, OnGetAsync, OnPostAsync.
- Rule Uri fields should be of type System.Uri now only runs against JustMyCode fields and not all Application fields.
- The rules Types that could have a lower visibility, Methods that could have a lower visibility, Fields that could have a lower visibility, and Avoid public methods not publicly visible don't match anymore potentially dead elements, candidates for removal.
- The rule Avoid methods potentially poorly commented has higher thresholds.
- The rule From now, all methods added should respect basic quality principles has higher thresholds and doesn't match refactored methods whose signature has been modified.
- The rule From now, all types added should respect basic quality principles now has more drastic criteria to estimate poor-quality new types.
- The rule Avoid adding methods to a type that already had many methods now has higher thresholds.
- The rule Avoid partitioning the code base through many small library Assemblies now matches only library assemblies containing 3 or fewer types.
- The thresholds in the rules Assemblies with poor cohesion (RelationalCohesion) and Namespaces with poor cohesion (RelationalCohesion) has been set to identify only those assemblies that clearly exhibit a deficiency in cohesion.
- The rule Overrides of Method() should call base.Method() now requires that the base method contains significant code to call from the override method to emit an issue.
- The rule Avoid prefixing type name with parent namespace name doesn't match types with the same name as a namespace since there is the rule Avoid naming types and namespaces with the same identifier for that.
- The rule Fields should be declared as private or protected doesn't match anymore fields assigned outside its class since this issue is matched with the rule A field must not be assigned from outside its parent hierarchy types.
- The rule Types with disposable instance fields must be disposable now only considers disposable fields instantiated at construction time.
- The rule Avoid types with too many methods now requires at least a non-constant field in the type to match it, because it is ok to have many stateless methods in a class.
- The rule Do not raise reserved exception type doesn't consider NullReferenceException anymore.
- The rule Don't assign static fields from instance methods and Avoid non-readonly static fields now operates on JustMyCode.Fields.
- The rule Enum Storage should be Int32 doesn't warn anymore on enums of type long or ulong.
- The threshold in rules Avoid methods with name too long and Avoid fields with name too long went from 40 characters to 50.
- The rule Instances size shouldn't be too big threshold went from 128 bytes to 256 bytes.
- The rule Avoid types with poor cohesion LCOM threshold went from 0.84 to 0.91.
- The rule Avoid methods too big, too complex now requires a Cyclomatic-Complexity score higher than 17.
- The log Assembly {XYZ} doesn't contain any type. is now an info and not a warning anymore.
Bugs Fixed
- When analyzing a code base with many logs, the Error List dataGridView doesn't flicker anymore.
- A NullReferenceException could rarely occur when adding rows to some DataGridViews.
- Relative path like ".\..anything" were not considered as valid.
- C# source file declarations could not be resolve when a struct or class generic parameter constraint was followed by a => .
- In some complex situations the source declaration of an async and explicit interface implementation method may mistakenly appear on line 1.
- The rule Don't use obsolete types, methods or fields could match methods of an obsolete class that doesn't use anything obsolete.
- The rule Review commands vulnerable to SQL injection and Review data adapters vulnerable to SQL injection were wronly referencing System.Data.SqlClient.SqlCommand instead of Microsoft.Data.SqlClient.SqlCommand.
- The rule Immutable struct should be declared as readonly didn't emit any debt estimation.
- The rule Avoid static fields with a mutable field type could match fields typed with a delegate.
- Some top-level statement type can result in a generated class name like Program+<<Main>$>d__0 and such type was not analyzed.
- If a rule produced more than one issues on a code element, its new issues since baseline didn't have the new flag in the report.
- Rules that rely on the baseline only produces new issues, and these issues didn't have the flag new in the report.
- Constructor of a class that has required members could be seen as obsolete.
- For a required property or field, IsRequired could be false on a netstandard2.0 project using PolySharp.
- When a C# file ended with "//}" declarations in it were not be properly parsed.
- In the report's trend charts the tooltip shown when hovering the mouse over a chart could be transparent.
- Analyzing code using the C# 11 file visibility could rarely lead to a NullReferenceException.
- Very rarely an IndexOutOfRangeException could be raised while hovering with mouse a code query result.
- A NullReferenceException could be rarely raised at analysis time when referencing a third-party component not resolved.
Version 2023.1.2
Released on the 2nd of October 2023
Bug Fixed
- Starting from Visual Studio 2022 version 17.7.4, there have been instances where the NDepend progress circle does not appear in the Visual Studio status bar.
Version 2023.1.1
Released on the 19th of June 2023
Bugs Fixed
- In the dialog Analyze .NET Assemblies in Folder, typing a filter could provoke slow refresh on high number of rows (500+).
- When the NDepend project file referenced by a Visual Studio solution doesn't exist, the NDepend VS global menu could show a menu "Load project {N/A} attached to {N/A}" instead of "Attach new or existing project to the solution".
- Visual Studio project file .csproj containing <AssemblyName>$(RootNamespace)/<AssemblyName> can now be analyzed.
- An ArgumentOutOfRangeException could be thrown when opening a graph for the first time in a session.
- The DataGridView presenting statistics of query result is now drawn pixel-perfect. There were unnecessary padding.
- When searching for a node by name in graph with the search setting Match all when empty string ON, when closing the search panel an ObjectDisposedException could be raised.
- In Visual Studio, when showing the NDepend class browser it was possible that the query result's DataGridView's height wasn't maximal.
- When opening multiple time some projects, it could happen that in Project Properties > Code to Analyze, the component resolving background processing got frozen.
- When editing a query, if suddenly the DataGridView statistics was required, it might remained hidden.
- An ArgumentException could be thrown when analyzing an assembly instrumented by PostSharp.
- A NullReferenceException could be raised when a rule or a query, exported to HTML could have a null cell typed with IIssue or IRule, like in from r in Rules select new { r, i = r.Issues().FirstOrDefault() }.
- An UnauthorizedAccessException could be thrown at analysis time when the tool was trying to locate a .csproj file for an analyzed assembly in a parent directory with no read access.
Version 2023.1.0
Released on the 7th of March 2023
Support for Properties and Events
The NDepend code model is now filled with properties and events thanks to the new interfaces IProperty and IEvent. Until now only accessors methods and backing fields were analyzed and some details like attributes tagging properties and events were missing.
Support for Windows High-Contrast
The NDepend UI now adapts to Windows High-Contrast mode when this mode is enable.
Improved Class Browser
The Class Browser panel has been replaced with a Search Panel Tab. This way there can be multiple Class Browser instances and the user can filter by name or by kind of code element (Assembly, Namespace, Type, Method, Field, Property or Event).
Simplified Exploration of Changes since the Baseline
When right-clicking a project, an assembly, a namespace or a type, the 6x menus under What was changed have been simplified to a single menu button Diff since the Baseline. This new menu generates a code query that lists all changes within the element.
Access to Rider and VSCode Most Recently Used (MRU) Solutions>
The .NET solution chooser dialog now also lists Rider and VSCode Most Recently Used (MRU) Solutions if these IDEs are installed.
Improved Visual Studio Extension Install Experience
When installing the extension in Visual Studio a second time, VSIXIntaller.exe popped-up an annoying message box This extension is already installed to all applicable products. Not anymore.
When installing or uninstalling the NDepend VS extension, the installation status is reflected by a check icon instead of showing a message-box about the success of the operation.
Simplified Browsing of Large Query Results
In a query result, clicking the Expand or Collapse buttons now expands or collapses just on one grouping level when there are more than 20+ matched items. This simplifies browsing large results with hundreds or thousands of rows.
A double click on one of these buttons leads to the behavior expand all or collapse all (recursive) as in previous NDepend versions.
Select Children menu for Project, Assembly, Namespace and Type
New right-click menu Select Children available for projects, assemblies, namespaces and types. This menu generates a code query to browse and search within the concerned code element.
Simplified Query Navigation
When a query is generated from a Search or Query Edition tab, the query generated panel now has a new button to go back to the tab that generated the query.
Less False Positives
- The code metrics LCOM and LCOM HS have been improved to not take account of properties and events accessors and backing fields. This leads to less and more relevant matches for the rule Avoid types with poor cohesion.
- Type used from attribute constructors (like Foo in [MyAttribute(typeof(Foo))]) and used from attribute generic arguments (like Foo in [MyAttribute<Foo>]) are now seen as used by the type tagged, or the parent type of the member tagged. As a result the rule Potentially Dead Types doesn't match these types anymore.
- Type used from attribute tagging an assembly now has the new flag IType.IsUsedFromAssemblyAttributes. The rule Potentially Dead Types now relies on this new flag to avoid reporting such type as not used.
- The default rules Types with disposable instance fields must be disposable and Disposable types with unmanaged resources should declare finalizer now also take account of the interface System.IAsyncDisposable.
- The rule Attribute class name should be suffixed with 'Attribute' could match generic attribute classes, introduced with C# 11.
- The rules Structures should be immutable doesn't warn anymore about structures that have at least one fixed field, because such field cannot be declared as readonly.
- The rule Fields should be declared as private doesn't warn anymore about a field marked with the fixed keyword.
- The rule Override equals and operator equals on value types doesn't warn anymore about structures that have at least one fixed field, because such field is not meant to be compared.
Usability Improvements
- Go to Method, Field, Property or Event return Type now opens a new search tab to match the type.
- Global menu Source Diff since the Baseline now lists diff through the Search by Diff panel in a more browsable way.
- When a query result has only one column - the tree of code elements matched - the width of this column is set to the actual available width. This way no info gets unnecessary hidden because of a too short width.
- In VisualNDepend, new support for the keys Enter, F8 and Shift+F8 to go through matched code elements or issues within a query result.
- 2x new options in the dependency graph to eventually make it more readable:
- to avoid prefixing a type name with its parent namespace name when not grouping types' boxes by namespaces
- and to avoid prefixing a member name with its parent type name when not grouping members' boxes by types.
- A new option in the dependency graph lets the user zoom faster on deep graph. Alternatively, to quickly zoom on an element, click the Search button, search an item by name in the graph's items and double click it in the Search result.
- The Option Form is now larger for a better display.
- In the Dashboard panel, the trend chart range selected is now persisted across sessions. Also, now the range choices are shown within a popup menu for a clearer UI.
- In the Query Edition panel, the 3x checkboxes related to which sections of the query result are shown in the report are now grouped under a combo box. This makes the Query Edition panel clearer.
- In Query Result the statistic row is now hidden when it doesn't bring any value. These situations include when the query result is a scalar, when the query result is just a code element tree with no additional column or when expanding the sub-result view like when searching for types' coupling.
Improvements
- New properties IField.IsRequired and IProperty.IsRequired to match C# 11 required members.
- New property IMethod.IsDefaultConstructor to match default constructors generated by the compiler on classes that don't have a constructor defined in source code.
The default notmycode query Discard generated and designer Methods from JustMyCode now relies on this new property to make sure generated default constructors are not in the domain JustMyCode. - When debt settings updates are persisted properly in a shared .ndsettings file, they are not saved anymore in the project file (.ndproj) to avoid sync issues.
Bugs Fixed
- When comparing against a baseline, the generated type System.Runtime.CompilerServices.NullableAttribute could be incorrectly seen as added in newer snapshot and removed in baseline snapshot.
- A method declared as protected or protected internal in a sealed public class now doesn't have anymore the flag IsPubliclyVisible.
- When an assembly A forwards a type T to another assembly, but still the project that leads to A references the source file containing T (not compiled thanks to some #if pragma), an exception could occur at analysis time.
- When the panels Query-Explorer and Query-Edit bounds on screen are overlapping, selecting a query in Query-Explorer doesn't bring to front anymore the Query-Edit panel. However double-clicking a query in Query-Explorer bring to front the Query-Edit panel, same with the new menu "Edit" available on right-clicking a query .
- When a .csproj file contains a tag like <AssemblyName>$(SolutionName).$(MSBuildProjectName)</AssemblyName> the proper assembly name is now resolved.
- Graph options could be modified when no session was opened, but modifications in such situation were not persisted. Now the Graph options can be modified only when a session is opened.
- When running an analysis with NDepend.PowerTools.exe, if the user changes the Console windows size an ArgumentOutOfRangeException could be thrown.
- Clicking the link coupling matrix in the graph bar could lead to an ArgumentOutOfRangeException.
- A NullReferenceException could be thrown in Visual Studio while clicking Run Analysis in the control shown while hovering the progress circle, while a new analysis result gets loaded.
- Rarely a NullReferenceException could be thrown when loading an analysis result.
Version 2022.2.1
Released on the 10th of November 2022
Improvements
- The NDepend extension can now run within Visual Studio 2022 ARM from Visual Studio 2022 version 17.4.0 and onward.
- The NDepend analysis & reporting on Windows / Linux / Mac can now run on net7.0. net6.0 and net5.0 are still supported.
- New property IType.IsVisibleOnlyInFile to detect when a type is declared with the C#11 keyword file.
- The rules Avoid duplicating a type definition across assemblies, Avoid defining multiple types in a source file and Types that could be declared as private, nested in a parent type have been updated to avoid matching types declared with the C#11 keyword file.
- New property IType.IsReadOnly to detect when a structure is declared as readonly.
- New rule Immutable struct should be declared as readonly (ND1914) to detect immutable structures that are not declared as readonly.
- In the Graph, Matrix and Metric views, the user can now choose if mouse-wheel provokes zooming (default and actual behavior) or vertical scroll in the new Options > Miscellaneous panel. Notice that Ctrl+Mouse-wheel let's perform the other action.
- A new option in the new Options > Miscellaneous panel now let's discard the ding sound played when showing an NDepend dialog that requires user attention (licensing matters, new version available, when about to close with data unsaved...).
- A new option in the Options > Miscellaneous panel let's prevent a tooltip to appear when hovering the NDepend circle in the status bar (both in Visual Studio and VisualNDepend).
- When using Rider to edit and diff source files, rider64.exe is also resolved in ToolBox directory like %AppData%\Local\JetBrains\Toolbox\apps\Rider\ch-0\2022.4167.23\bin\rider64.exe.
- When the debt settings are stored in a shared .ndsettings file, when changing some debt settings and then save them, there are only persisted in the .ndsettings file, the project file (.ndproj) is left untouched.
Bugs Fixed
- Editing the graph options while the graph panel wasn't been shown yet could lead to an ArgumentOutOfRangeException.
- A dialog to Install .NET 3.5 could popup when loading a project VisualNDepend.exe on a Windows 10 or 11 on which .NET 3.5 was not installed.
- The Metric View sith Size Metric set to Method Level could lead to incorrect display.
- Very rarely a NullReferenceException could be thrown when hovering a row or a column in the dependency matrix.
- Very rarely a NullReferenceException could be raised when analyzing some very special classes generated by the C# compiler.
Version 2022.2.0
Released on the 17th of October 2022
NDepend GitHub Action
Code Quality Reporting from the GitHub Build
Confidentiality
Build Fail
Pull Request Quality Check
Use a Run as Baseline
Import Code Coverage Data
Download Results from GitHub
Full .NET 7.0 support
All .NET 7.0 project's kinds can now be analyzed:
- ASP.NET Core
- Windows Desktop
- Blazor
- Console
C# 11 support
Code containing some C# 11 raw string literals and C# 11 static abstract members can now be analyzed.
Open Source Code Declarations in Rider or VSCode
It is now possible to plug Jetbrains Rider or Visual Studio Code to open source code declarations.
Both IDEs can also be used to diff changes in source code made since the baseline.
This way the standalone executable VisualNDepend.exe can work side-by-side with these IDEs.
NDepend can run on .NET 6.0
.\net6.0\NDepend.Console.MultiOS.dlland
.\net6.0\NDepend.PowerTools.MultiOS.dllnow run on .NET 6.0 on Windows, Linux and MacOS.
Default Rule Update and Lightweight Project File
Untouched default queries and rules are now persisted by default through their query ids, or just query names for the ones that don't have ids. The benefits are twofold:
- NDepend project files weight much less (from 570KB to 70KB roughly)
- Untouched default rules and queries are automatically updated to their new versions when a new version of NDepend is used.
Immutable NDepend Project Files
Before NDepend v2022.2 an NDepend project could be modified when used on a machine different than the one that created it. This is because directories of the local .NET installation (including NuGet package directories) were referenced and these directories could change on a different machine.
Now only the .NET Profile is stored in the project and these directories are inferred from it. This makes the NDepend project immutable, no matter on which machine it is used. This makes it more convenient to store the NDepend project file in the SCM (Source Code Management).
Analysis Result Id
An analysis result can now be identified with a human-readable identifier. Often such identifier will be a build number, a version or a milestone name.
Load the NDepend Project side-by-side with the VS Solution
There are contexts like Unity where the solution file can be re-generated. In such context an NDepend project cannot be attached to such solution.
This is why now per default, when a solution gets loaded in Visual Studio, the NDepend project that is in the same directory and that has the same solution file name (except the file extension) gets loaded even if it is not attached to the solution.
Improvements
- In Reports generated, the main menu can now be pinned.
- Improvement of the heuristic that resolves an assembly path from a
.csproj
and.sln
files. For example when aDirectory.Build.props
file contains<AssemblyName>$(SolutionName).$(MSBuildProjectName)</AssemblyName>
the proper assembly name is now resolved. - Assemblies resolution now also searches in
Release
directories if the assembly is not located under a inDebug
like directory. - Parsing the source code at analysis time is around 10% faster.
- Clustering large set of nodes on the dependency graph could create too large clusters. This has been improved to obtain more readable graph in any situation.
- In the dependency graph, when applying some filters that led to a graph with zero node, filters applied get modified to get at least one node. Now in this situation a message is shown to the user explaining this filter modification.
- New NDepend API method
IProjectReport.RebaseSourcePathsInReport(string fromPath, string toPath, string lineSuffix)
to rebase any file path location to something else like a GitHub source url. For example calling:project.Report.RebaseSourcePathsInReport( "root", "https://github.com/ndepend/xy/blob/main", "#L$LineNumber$");
before callingproject.RunAnalysisAndBuildReport();
transformsC:\a\root\ClassLibrary\test.cs Line 76
intohttps://github.com/ndepend/xy/blob/main/ClassLibrary/test.cs#L76
. - The rule
ND1800: Methods that could have a lower visibility
doesn't match anymore constructors of classes deriving fromSystem.ComponentModel.EnumConverter
, because these classes are instantiated dynamically. - Analysis result storage is now rounded to seconds instead of minutes. Hence two analysis results obtained within the same minute can be stored side by side if the project setting Persist Analysis Result Frequency is set to Always.
- 3x new trend metrics related to code coverage overage on JustMyCode:
Percentage JustMyCode Coverage
# Lines of JustMyCode Covered
# Lines of JustMyCode Not Covered - The query
Quality Gates Evolution
now produces a more comprehensive result.
Bugs Fixed
- The TeamCity plugin could fail with a JAXB not available exception when upgrading to latest TeamCity version.
- Default queries Pure methods should be tagged with PureAttribute and Methods tagged with PureAttribute must be pure had a typo in System.Diagnostics.Contracts.PureAttribute and didn't work on this attribute usage.
- The rule ND1203 Class with no descendant should be sealed if possible could return an abstract class.
- In complex string interpolation scenarios, a C# source file could not be well parsed leading to wrong value for number of comment or cylomatic complexity.
- When issues are computed, the metric view could be updated unexpectedly with editing query panel or search panel result.
- When runing two analysis simultaneously on the same project, some DirectoryNotFoundException could be thrown. These exceptions are now replaced by a proper message explaining the simultaneous problem.
- An exception could be raised when running an analysis and build a report on net5.0.
- When issues of a rule were grouped by parent source files, the menu Suppress Issue was not shown when right clicking an issue.
- In Metric View, it is not possible anymore to open the Save Snapshot dialog when an analysis is executed to avoid potential exception thrown when the new session gets loaded upon analysis termination.
- Trend icons shown in Quality Gate Evolution query result could be misleading.
- In Visual Studio 2022 17.2 and upper, when editing a query the completion box could appear as empty the first time it was shown.
- In the Project Properties's Baseline setting form, the build selected might be erroneous.
- VisualNDepend's Splash Screen had a few glitches in high DPI like 350%.
- A Win32Exception could occur very rarely when closing a project-only session.
- An exception could be thrown rarely when opening a project only session just after having initiated a Matrix operation in an analysis result session.
- A NullReference exception could be thrown when discarding the baseline in the UI.
Version 2022.1.4
Released on the 10th of June 2022
Improvements
NDepend now shows an error message box when executed from a WinRar temporary directory like C:\Users\{user}\AppData\Local\Temp\Rar$anything. This is because WinRar might corrupt the temporary installation anytime by deleting some files.
The rule Avoid naming types and namespaces with the same identifier could match namespaces generated by the compiler whose name cannot be changed.
Bugs Fixed
A NullReferenceException could be thrown when building the report when having a query that returned a null ICodeElement reference.
In Visual Studio 2022 17.2, when editing a query the documentation windows surrounding the completion box could be shown as empty.
When editing a query in high DPI, the buttons' images in the documentation windows were not scaled properly.
When editing a query in high DPI, when the documentation window was at the left of the completion window it was overlapping it.
The help button in the Dependency Matrix panel was not pointing to the proper matrix online documentation.
When opening a source file from the Visual Studio 2022 NDepend extension while a VS 2019 instance run, a COMException could be raised.
In the Query Explorer panel, drag & dropping a code query could lead to a wrong index in the parent group.
When right clicking a code query result columns, the menu Export to Metric View wasn't well formatted in high-DPI context. Also theme might not be well applied too on this menu.
Rarely a NullReferenceException could be raised when aborting an analysis.
Rarely a DirectoryNotFoundException could be raised when running an analysis.
Rarely a NullReferenceException could be raised when decompiling an element with ILSpy.
In Visual Studio or VisualNDepend, rarely a NullReferenceException could be raised at the end of an out-of-process analysis when the analysis result file just produced could not be found.
Version 2022.1.3
Released on the 12th of May 2022
Bugs Fixed
In Visual Studio 2022 v17.2, when loading a solution with an NDepend project file attached, an InvalidCastException could be thrown.
When inferring an assembly location from a .csproj file, the value <AssemblyName>$(MSBuildProjectName)</AssemblyName> is now well handled.
Version 2022.1.2
Released on the 21th of April 2022
Improvements
Clustering a large set of nodes on the dependency graph could create too large clusters. This has been improved to obtain more readable graph in any situation.
A C#10 file-scoped-namespace now have its source file declaration(s) resolved at NDepend analysis time.
Bugs Fixed
Rarely an InvalidCastException could be thrown when attaching an NDepend project to a VS solution
When attaching a new project to a VS solution, run the analysis with report, wait a few minutes, then run the analysis again, the baseline could be incorrectly set as the new analysis result instead of the first one.
In the UI Rule Id and Rule Explicit Id were not visible in Dark mode.
Version 2022.1.1
Released on the 1st of April 2022
Coverage Exclusion through .runsettings file
NDepend can now read and process the .runsettings file's coverage exclusion and inclusion rules to obtain coverage statistics similar to the ones provided by other coverage tools.
Improvements
- Code coverage overall ratio computation has been changed and now better reflects the ratio shown by coverage tools.
- New property IAssembly.CompanyName that gets the string value of the attribute System.Reflection.AssemblyCompanyAttribute, or empty string if this assembly hasn't such attribute.
- New property IAssembly.PublicKeyToken that gets the hexadecimal upper string value of the PublicKeyToken of the assembly, or empty string if this assembly is not signed.
- The heuristic to resolve an assembly from a .csproj project file now better handle <BaseOutputPath> value.
- The heuristic to resolve an assembly from a .csproj project file now also investigates child directories named b that might contain binaries.
- When opening the source file declaration of a class or a method declared in a .razor file, the declaration is now opened at the right line.
- The rule Class with no descendant should be sealed if possible now references this benchmark that measures performance improvements of using the sealed keyword.
- Typos fixed in rules description and API documentation.
Fewer False Positives
The types compiled by the Razor infrastructure are now matched by the notmycode query Discard generated Types from JustMyCode to avoid some false positives on those.
Bug Fixed
The rule Avoid decreasing code coverage by tests of types could throw InvalidOperationException.
Version 2022.1.0
Released on the 16th of March 2022
Report Improvements
- Some rules and code queries result's cells match several items (like several classes or several issues). A new report setting let's unfold up to N items in the concerned queries' results' cells. This setting is set by default on new projects with N=5.
- When the source file declaration(s) of a code element has been resolved at analysis time, per default there is a link to this declaration for each occurrence of the code element in the report. A project setting let's choose whether the linked path is absolute or relative to the project file location.
- A new setting let's show code element's icon in report.
- These new features are enabled by default on new projects and on existing projects.
- New flags in the enumeration NDepend.Project.ReportOptionsFlags: DontUnfoldMultiItemsCell DontShowCodeElementIcons DontLinkElementToSourceFile LinkElementToRelativeSourceFile
- In report "View Query Description" is now replaced with "View Quality Gate Description" and "View Trend Metric Description" on this kind of queries.
ILSpy Plugin
A new ILSpy plugin let's NDepend and the free and open-source decompiler ILSpy interact both ways.
From NDepend to ILSpy: Just right click any assembly, namespace, class, method or field in NDepend or Visual Studio (with the NDepend extension installed). There are 3 new menus to:
- Select the code element in ILSpy
- Decompile the code element with ILSpy (Target languages: C# and IL)
- Decompile and Compare: the code element is decompiled from both the baseline assembly and the current assembly and both text files obtained are compared
It is possible to decompile large namespaces or even assemblies. This is especially useful to diff two versions of an assembly. If several classes are decompiled, they are aggregated in the text file in a consitent order, which makes the code review of changes possible.
ILSpy is a fast decompiler but C# decompilation of dozens or hundreds of classes can take a few seconds or minutes thus a progress dialog is shown with an Abort button.
From ILSpy to NDepend it is possible to:
- Show any code element on the NDepend dependency graph or matrix
- Analyze with NDepend one or several assemblies selected
Visual Studio 2022 Themes and Icons
The NDepend Visual Studio extension and VisualNDepend are now themed with the Blue, Dark and Light Visual Studio 2022 themes.
NDepend now have Visual Studio 2022 icons. In Dark theme, icon colors are now transformed to increase the contrast with the dark background.
In dark theme, now all right click menus are shown as dark.
New Filtering Capability to better Resolve Coverage Files in Complex Scenarios
It is now possible to provide a wildcard filter string to locate precisely coverage files in the specified directory. This way if coverage files are outputted in child directories randomly, like with Coverlet technology, it is possible to retrieve it.
Query Result Export Improvements
It is now possible to export a query result to JSON and CSV format.
New export options to:
- Unfold or not multi-items cell.
- Chose to prefix (or not) the exported result with the query body.
- Chose to suffix (or not) the exported result with the statistics for each column.
- Prefix code elements names in exported document like with C: for classes, M: for methods...
Right clicking a group in the Queries and Rules explorer panel let's export several queries' results to HTML, XML or JSON. When exporting dozens or hundreds of queries the UI remains responsive (instead of freezing as before) and an Abort button is now shown.
The last chosen export format is stored across session and re-used when opening a new query or search panel. Also for each panel restored from a previous session the export format is remembered.
New API extension method ExtensionMethodsQuery.ExportQueryResult(this IQueryExecutionResult, QueryResultExportDocumentKind) to automate exporting query result to the various formats (HTML, XML, Excel, JSON, CSV, Text).
Out-of-process Analysis per Default
Analysis can now be executed out of the Visual Studio or VisualNDepend process and this is the default choice.
In-process analysis has very few performance and responsiveness impact. Nevertheless out-of-process is now the default choice to make sure Visual Studio productivity doesn't get affected at all.
Also when the analysis is executed out-of-process it is possible to abort it with the Abort button, shown in the Analysis Error List panel.";
It is still possible to fallback to in-process analysis from the Options > Analysis Settings panel.
Visual Studio solution picker Improvements
The Visual Studio MRU (Most Recently Used) solutions picker dialog now properly resolves MRU solutions from VS 2022, 2019 and 2017.
Fewer False Positives
- The notmycode query Discard generated Namespaces from JustMyCode now matches namespaces generated by the Blazor infrastructure. This fixes several issues found on such generated code.
- The rule Types with disposable instance fields must be disposable now checks that disposable classes of matched fields are instantiated within the parent class to avoid some false positives.
- Usage of ref struct could lead to violate the rule Don't use obsolete types, methods or fields because the compiler tags ref struct with ObsoleteAttribute to avoid usage from older C# versions.
- In .NET 6, the class Program generated by top-level-statement could violate the rule Class with no descendant should be sealed if possible.
- When using record in .NET 6 the rule Do not hide base class methods could warn on the generated method <Clone$>() that is currently not marked by the C# compiler as generated by the compiler.
Improvements
- New property INamespace.IsGeneratedByCompiler to be able to filter out namespaces like Microsoft.CodeAnalysis or System.Runtime.CompilerServices that are generated by the compiler. This way such generated namespace doesn't clutter the dependency graph or matrix.
- At analysis time, types provided in types and methods's generic parameters' generic constraints are now seen as used by the type (or parent type for generic method).
- When opening the source file declaration of a class or a method declared in a .razor file, the declaration is now opened at the right line.
- VisualNDepend or Visual Studio extension startup takes around 0.2 second less thanks to lazy instantiation of theme resources.
- A filter is shown on NDepend project's list (both on Start Page and on Ctrl+O dialog) when there is more than 10 projects.
Bugs fixed
- When running analysis out of process, a log corresponding to an error might not be shown in the Error List panel.
- Rarely a NullRefereneException could be thrown when running an analysis in VisualNDepend or Visual Studio process.
- Rarely a NullRefereneException could be thrown when attempting to analyze a new set of Visual Studio projects.
- In query result, when right clicking an item declared within a Source file item unfolded, menu "Open source declaration" was shown twice.
- In the query edition panel, labels showing parent group name and timelaps could overlap a bit the toolbar above.
- When changing the theme in Visual Studio, the NDepend search panel back color wasn't updated.
- After creating a new project (temporary or not) to analyze some .NET Framework assemblies, when disabling and re-enabling the VisualNDepend or Visual Studio window, a message box was asking to reload.
- The rule 'Collection properties should be read only' has been improved to match read-write properties types with an array.
- When initializing a project with C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.2\System.Private.CoreLib.dll the proper .NET profile wasn't setup.
- In DPI 225%, in the Project Properties > Analysis panel, the "In UI:" label could overlap the textbox at its right.
- In DPI higher than 100%, when right clicking query result header rows the menu icons size were not adjusted to the DPI resolution.
- When attempting to browse a directory on a network drive not found, a Win32Exception could be thrown. Now an explanatory message box is shown instead.
- Rarely in Visual Studio 2022 when right clicking a code element and selecting an NDepend action a NullReferenceException could be thrown.
- Rarely when reloading a session in VisualNDepend a NullReferenceException could be thrown.
Version 2021.2.5
Released on the 16th of December 2021
Improvement
- The Visual Studio MRU (Most Recently Used) solutions picker dialog now properly resolves MRU solutions from VS 2022, 2019 and 2017.
Bugs fixed
- The splitter used to separate the query edition and the query result areas might not be well redrawn when resizing the panel.
- When quickly showing several queries edited before the rules being all passed, once all rules were passed the query result of these queries edited could appear as frozen.
- A FileNotFoundException could rarely occur when opening an analysis result in the UI.
- A NullReferenceException might be thrown when creating a new project.
- When loading an analysis result file (.ndar) corrupted, a proper message is now shown to the user.
- A TaskCanceledException could be thrown when building a solution and cancelling the build.
Version 2021.2.4
Released on the 25th of November 2021
Improvement
- When specifiying the project file path to NDepend.Console.exe (analysis or create project modes) it is now possible to provide a path relative to the current directory (obtained internally with System.Environment.CurrentDirectory) or just a file name in the current directory.
- When using the cp or CreateProject NDepend.Console.exe's switch, .sln, .csproj and .dll file paths specified can now be just a file name, in which case they are resolved in the directory containg the project file.
Less False Positives
- The rule Avoid having different types with same name doesn't warn anymore on usual WPF class name MainWindow.
- The rule Methods name should begin with an Upper character could incorrectly warn on some methods generated for records like <Clone$>() but not marked as generated by the compiler.
Bugs fixed
- On Linux and MacOS, sometime NDepend didn't locate some assemblies to analyze because it searched with bin\debug directory instead of bin\Debug directory (path case sensitive).
- On Linux and MacOS source files analyzed might not be zipped at the end of the analysis depending on their cases (lower, upper, mixed lower and upper).
- Opening a project on a drive containg a dollar character $ like \\wsl$\Ubuntu\home\usr\Projects\foo\foo.ndproj shows an error message (because System.Uri doesn't support $ in path) but resulted in an inconsistant UI state that could led to a crash. Now the UI returns properly to Start Page state.
- In UI > Project properties > Analysis > Baseline for Comparison > Settings, when some panels were floating and when the user clicked the Baseline Settings dialog browse project file, the floating panels could become enabled before the Setting dialog was closed which could lead to further exceptions.
Version 2021.2.3
Released on the 22th of November 2021
Improvement
- In the Graph Options, the user can optionally define a color that will be used to color the graph background. This possibility is useful for example to obtain a green screen overlay background.
Bugs fixed
- When running an analysis in Visual Studio, at analysis ending the Query Edition and Search panels were preemptively shown which was annoying.
- Rarely an ArgumentException could be thrown when computing layout of a large graph.
Version 2021.2.2
Released on the 15th of November 2021
Bugs fixed
- NDepend trial couldn't be activated on a Macbook with a Touch ID sensor.
- A NullReferenceException could be sent when clicking a link label in panel shown by hovering the progess circle.
Version 2021.2.1
Released on the 8th of November 2021
Improvements
- When using NDepend.Console.exe or NDepend.Console.MultiOS.dll, the terminal back color was forced to black. Console messages are now shown using the default terminal's fore/back colors and special messages like warnings or errors are highlighted with white fore color above yellow or red back color.
- When providing wrong argument to NDepend.Console.exe or NDepend.Console.MultiOS.dll the error is now shown after the help. This makes it more practicable for user to find it and read it.
- New NDepend.Console.exe and NDepend.Console.MultiOS.dll command line switch "h", in addition to "help", to show help.
- The 3x help sections shown by NDepend.Console.exe and NDepend.Console.MultiOS.dll (analyze and create report; create a project file; register evaluation or license) are now easier to read since their titles are shown as highlighted.
- A new file named ".\net5.0\---Start evaluation by running dotnet.exe NDepend.Console.MultiOS.dll Regeval" guides user on registering eval.
- Analysis duration is now displayed more accurately with milliseconds.
Bugs fixed
- When providing wrong argument to NDepend.Console.exe or NDepend.Console.MultiOS.dll console the error was prefixed with "Bad command line arguments: Bad command line arguments: "
- A warn log about a platform directory (like 'C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0') not found could be emitted at analysis time. Since NDepend version 2021.2.0, framework code elements can be resolved from their reference and such warning doesn't matter anymore.
- When running analysis out-of-process in Visual Studio or VisualNDepend, the Abort analysis button is disabled before persisting the code model snapshot (.ndar file). This way there is no chance of corrupting .ndar file.
- When running NDepend.Console.exe some unwanted traces from graph computation could be shown on console.
Version 2021.2.0
Released on the 20th of October 2021
New Support
- The NDepend extension now fully integrates within Visual Studio 2022.
- All .NET 6.0 project's kinds are supported:
- ASP.NET Core
- Windows Desktop
- Blazor
- Console
- >NDepend analysis, ruling, reporting, API and PowerTools now run on MacOS and Linux
- The new ./net5.0/NDepend.Console.MultiOS.dll executable is a .NET 5.0 assembly that can be started with the dotnet command.
- NDepend.API.dll is now a netstandard 2.0 assembly. Thus the NDepend API can be executed within most .NET contexts including: .NET 5.0, 6.0, .NET Core 3.x, .NET Framework 4.7.2 and 4.8.
- The open-source NDepend PowerTools now runs on MacOS and Linux
New Console Capabilities
- NDepend.Console.dll and ./net5.0/NDepend.Console.MultiOS.dll can be used to create project with the cp or CreateProject argument.
- NDepend.Console.dll and ./net5.0/NDepend.Console.MultiOS.dll can be used to register a license on a machine, or to start evaluation.
Full Support for Target Framework Name
- The new property IAssembly.TargetFrameworkName returns the target runtime targeted by an application assembly (like "net5.0", "netstandard2.1", "net461"...).
- The new property IAssembly.TargetPlatform returns the target platform targeted by an application assembly (like "AnyCPU", "x64", "x86"...).
- For .NET Standard assemblies whose parent directory wasn't named like "netstandardX.Y", in Project Properties the runtime shown was incorrectly shown as "netfx4". Now the proper runtime "netstandardX.Y" is shown in this situation.
No more referenced assemblies not found warning
- When a third-party or framework assembly referenced by some application assemblies is not found at analysis time, it is now built from the references to it instead of being reported as not found.
- Child namespaces, types, methods and fields of such referenced assembly are also resolved from their references found in application code.
- The consequence is less warning. Also no matter the flavour of .NET targeted (.NET 6, Unity, Blazor, .NET Standard...) the analysis result is now always complete.
- The new property ICodeElement.IsThirdPartyInferredFromRef can be used to list code elements resolved from reference and not from definition at analysis time.
Improved diff since the baseline
- When a class c is sealed in baseline and not anymore (or vice-versa) the extension method c.WasChanged() now returns true.
- When a class or an interface x implements in baseline an empty interface and not anymore (or vice-versa) the extension method x.WasChanged() now returns true.
- When the list of attributes of a IAssembly, IType, IMethod or IField x is changed since baseline, the extension method x.WasChanged() now returns true.
- When the type in a typeof(TypeName) clause in a method m is changed, the extension method m.CodeWasChanged() now returns true.
Improvements
- 30MB of process memory is saved at VisualNDepend and Visual Studio extension runtime. This is the consequence of replacing 20MB of DevExpress Winforms UI libraries with a single 434KB library based on the OSS project DockPanelSuite.
- The NDepend project can reference some Linux style absolute path like /usr/share. However it is recommended to reference paths as relative to the project file location. This way the project is usable on various OS.
- Types and methods generated by C# top-level statements are shown as application code despite being flagged as code generated by compiler.
- New property IEnumerable<IType> IAttributeTarget.AttributeClassesThatTagMe { get; } to easily get all attribute classes that tag an IAssembly, IType, IMethod or IField.
- When attaching a new NDepend project to a VS solution, or when referencing a VS solution from an NDepend project, if the default project name filters (which is "-test") matches all projects of the VS solution, the filter is reset to avoid the situation where all projects to analyze are filtered-out.
- When analysing a Visual Studio solution with a filter that filters-out all its projects/assemblies, a new warning explains in plain-english the situation and that the filter needs to be modified.
- New API method FillIncremental() to compute a ICodeMetric object. With the API method FillIterative() (that already existed) only elements computed at iteration N are used to compute elements of iteration N+1. With FillIncremental() all elements computed until iteration N are used to compute elements of iteration N+1.
- A Technical-Debt breaking point value is a TimeSpan. Such value was formatted in number of days only, like 1000d. Now for values higher than a year the breaking point is formatted this way 2y 270d.
- Now code query result column can be typed with IAbsoluteDirectoryPath or IAbsoluteFilePath.
- When assemblies are resolved from a Visual Studio solution, IAssembly.VisualStudioProjectFilePath is now properly assigned to the project file resolved from the solution.
- Documentation of the rule Avoid namespaces dependency cycles has been improved.
- The rule Avoid referencing source file out of Visual Studio project directory now checks that the source file path and the project file path are on the same volume before emitting an issue. This avoids false-positive when the same project is used on several OS.
- It is now possible to drag and drop Visual Studio Solution Explorer types, methods and fields item (those under source file) to the NDepend dependency graph.
- New Power Tool r) .NET v5.0 and v6.0 installed Public API Changes that works on Windows, Linux and macOS.
- In the NDepend Project Properties, when browsing for an assembly, a Visual Studio solution or a directory, the default directory shown in the browse dialog is now among the ones referenced by the project. This directory is also updated upon directory selection or directory browsed chosen.
Bug fixed
- In Visual Studio it might happen that an NDepend project attached to a Visual Studio solution gets detached unexpectedly.
- In the code query result panel, sorting a column with values being typed with bool or string could result in improper sorting.
- The Search panel's guide tooltip could be shown at the (0,0) location on screen.
- When changing the monitors configuration and restarting VisualNDepend.exe, the main window or a floating window could be invisible if its previous location was not in the new virtual screen coordinates. In such situation the VisualNDepend.exe window is now shown entirely within the primary screen.
- The Start Page sometime had a white ribbon at the bottom.
- For .NET Standard assemblies whose parent directory wasn't named like "netstandardX.Y", in Project Properties the runtime shown was "netfx4". Now the proper runtime "netstandardX.Y" is shown in this situation.
- IMethod.IsAsync returned false for async methods declared in a netstandard assembly.
- The rule Don't call your method Dispose() could warn on Dispose() method declared in a disposable class declared in a netstandard assembly. In such situation the interface System.IDisposable wasn't resolved from netstandard.dll.
- In the NDepend Project Properties > Analysis panel, when changing the state of Zip Source Files the asterisk (*) character wasn't shown in the Analysis tab.
- Both in Visual Studio and VisualNDepend, when the NDepend Project Properties panel is undocked in a floating window, showing the Baseline or Coverage dialog didn't freeze the Project Properties panel. This could lead to a corrupted state.
- When running an analysis, some link labels were not disabled on the Dashboard. Clicking those link labels opened a panel. If the panel was still opened when analysis finished this could lead to a corrupted state. Those link labels are now disabled during analysis.
- From the code query result panel, when attempting to export the query result but the export fail (like exporting a scalar value to the graph), the export button was still updated with the failing export kind appareance.
- When closing VisualStudio with the NDepend extension loaded, some NDepend panel state might not be persisted properly.
- In a context with 2 or more screen with various DPI, when unfolding the graph Group-By or Filter menu, the drop box could not be well located on screen.
- In VisualNDepend > Tools > Options > NDepend Skin, when changing the main menu casing and then changing the theme, the new menu casing selected wasn't applied.
- In Dark theme context in the panel Search by Mutability, the labels fore color was black instead of white.
- In a NDependTrendData.xml file, when a row <Metric> was not closed, an exception was thrown. Now instead a meaningful error message is shown to the user.
- Rarely a memory leak could happen when closing a session after having experimenting code query writing and code search.
- An exception could be thrown when analyzing an assembly compiled from an XSLT sheet with xsltc.exe.
- Drag and Dropping from Visual Studio Solution Explorer a type or member (under a source file) to the graph, could lead to a NullReferenceException.
- Parsing some .coverage file produced by Visual Studio coverage could lead to an exception with message Microsoft.VisualStudio.Coverage.Symbols.dll not found.
- Rarely an ObjectDisposedException could be raised when updating a query result.
- Rarely an ObjectDisposedException could be raised when drawing the dependency matrix.
- Rarely an OverflowException could be raised when drawing the dependency graph.
- Rarely an OverflowException could be raised when drawing the metric view cursors.
- Full support for situations when the user corrupts the historic analysis results storage directories naming.
- When loading trending data, if 2 rows were logged on same date an ArgumentException could be raised.
- Rarely a NullReferenceException could be raised when adding a Visual Studio solution to the code to analyze section of an NDepend project.
- Rarely a NullReferenceException could be raised when clicking Run Analysis while the NDepend project was edited and not saved.
- In Visual Studio, when hovering the button Close all panels, a NullReferenceException could be raised.
- When closing an NDepend project in Visual Studio rarely a NullReferenceException could be thrown.
- When opening a large dependency matrix and then close the NDepend project, rarely a NullReferenceException could be thrown.
Version 2021.1.0
Released on the 28th of January 2021
New Support
- Importing Code Coverage Data from NCrunch
- Xamarin Applications Support
- Unity Applications Support:
- 9 new rules dedicated to Unity
- Many rules adapted to avoid false positives on Unity
- Detection of regular and custom Unity Installation by reading the registry key: HKEY_CURRENT_USER\SOFTWARE\Unity Technologies\Installer\Unity@Location x64
- Universal Windows Platform (UWP) Applications Support
Improvements
- NDepend can now run on Windows machine with Federal Information Processing Standard (FIPS) enabled.
- Possibility to resolve assemblies from a Visual Studio solution within a Root Folder
- Improved resolving of assemblies from a Visual Studio solution
- .Views.dll ASP.NET Razor assemblies are now analyzed. However all their code elements are considered as notmycode since such assembly is generated by the compiler.
- Source file declaration is now resolved for records.
- New NDepend.API flag IType.IsRecord that is set for record classes.
- New NDepend.API flag IMethod.IsPropertyInit for property initializer method defined with the C# keyword init.
- New NDepend.Console.exe argument /DontPersistHistoricAnalysisResult to force not persisting analysis result.
- New NDepend.Console.exe argument /ForceReturnZeroExitCode to force returning exit code zero even when some quality gate are violated.
- When using the NDepend.Console.exe argument /InDirs with (or without) the argument /KeepProjectInDirs, a new info log is added to explain in plain-english which project's directory are kept (or removed).
- When opening a file in Windows Explorer, the file is now selected. Like for example in Project Properties > Code to Analyze > double click an assembly row
- When one or several elements are selected in the graph it is now possible to go back to the menu with application map shown when no element is selected.
- Code Querying Improvements : It is now possible to use together:
- CQLinq expressions containing a code element name like HasAttribute("AttributeName") or DepthOfDeriveFrom("BaseClassName")
- with all kind of CQLinq expressions like NewerVersion() used to query the delta since the baseline.
New Rule and Less False Positives
- New rule in the Immutability category: Record classes should be immutable
- The query Types immutable should be tagged with ImmutableAttribute doens't match record anymore since most record classes are de-facto immutable.
- The rule Avoid namespaces with few types doesn't match anymore namespaces children of common infrastructure namespaces (like Services, Domain ...).
- The rule Float and Date Parsing must be culture aware doesn't warn anymore on methods in notmocode set.
- The rule Avoid partitioning the code base through many small library Assemblies doesn't warn on ASP.NET Core generated assemblies whose name is suffixed with .Views.
- The rule Avoid duplicating a type definition across assemblies doesn't take account of types defined in ASP.NET Core generated assemblies whose name is suffixed with .Views.
- The rule Types with disposable instance fields must be disposable now operates on JustMyCode types only. This way the rule avoids reporting unfixable issues on classes generated.
- The rule Do implement methods that throw NotImplementedException now operates only on JustMyCode.
- The rules Non-static classes should be instantiated or turned to static, Classes that are candidate to be turned into structures, Types that could have a lower visibility, Collection properties should be read only don't warn anymore on classes tagged with System.SerializableAttribute.
- The rules Methods should be declared static if possible, Methods that could have a lower visibility, Collection properties should be read only don't warn anymore on methods of classes tagged with System.SerializableAttribute.
- The notmycode query Discard generated Types from JustMyCode now match more Xamarin Resource type.
- The notmycode query Discard generated Types from JustMyCode now match EF Core migratuon class deriving from Microsoft.EntityFrameworkCore.Migrations.Migration.
Bug fixed
- Methods declared in record classes used to be considered as generated by the JustMyCode query Discard generated and designer Methods from JustMyCode.
- When resolving assemblies from a Visual Studio solution or project file, if the output dir starts with "$ProjectDir$\bin\AnyCPU\Debug" the assembly resolving might fail.
- Usage of the keyword default in implicit generic context could be seen as an extra unit for the Cyclomatic Complexity under certain circumstances.
- In the Graph panel Layout menu, when checking a setting already checked the setting was unchecked. As a result no setting remained checked in the setting group which was incoherent.
- When hovering graph nodes just before NDepend loads a new analysis result could lead to a NullReferenceException.
- On a large graph made of 30K+ nodes, zooming on a leaf node could end up in an empty graph.
- A NullReferenceException could happen when some Group-By settings would lead to a graph with zero node.
- In rare situations, a NullReferenceException was thrown at analysis time because an outter/inner class relation couldn't be resolved.
- An error about wrong project file extension could be shown in Application Assemblies to Analyze, for example when a Visual Studio solution has a docker-compose.dcproj project.
- When scanning for assemblies in a directory an ArgumentException could be thrown with message {Illegal characters in path.}.
- Rarely a NotImplementedException could be thrown from the Visual Studio 2019 extension.
- The Reflector addin could not work when trying to make a command from reflector to NDepend.
- An ArgumentOutOfRangeException could be thrown when loading the UI on Windows system where SystemInformation.DoubleClickTime returns 0.
- An ArgumentException could rarely be thrown when closing Visual Studio with the NDepend extension loaded.
Version 2020.2.1
Released on the 25th of November 2020
Bug fixed
- Drag and dropping source files and directories from the Visual Studio Solution Explorer to the NDepend Graph could provoke removing the dragged items from the Visual Studio Solution Explorer.
Version 2020.2.0
Released on the 8th of October 2020
Improvements
- Full .NET 5.0 support
- Full C#9 support
- Full Blazor and Razor Support
Other Improvements
- Resolution of Target Framework Name of projects and assemblies analyzed.
- Support for the Debugging Information Embedded mode.
- Performance improvements when resolving third-party NuGet packages referenced. For example on OrchardCore to resolve the 183 NuGet packages referenced it used to take 8 seconds and it now takes around 0.2 seconds.
- When the dashboard shows a message claiming that the comment metric is not available, this message is now clickable. Clicking it edits a query that matches the assemblies preventing the comment metric to be available on the application.
- New NDepend.API methods:
- New property NDepend.DotNet.IAssemblyInfo.TargetFrameworkName that returns a string like "net5.0", "net5.0-windows", "netcoreapp3.1", "netstandard2.0", "net462", "net4x"...
- New property IType.OutterTypes useful for type nested in a nested type (recursive).
Less False Positives
- The rule Avoid namespaces with few types doesn't match anymore namespaces with few types declared in assemblies with less than 15 types.
- The rule Non-static classes should be instantiated or turned to static doens't warn if the type is potentially instantiated through a Json serializer like the GetFromJsonAsync() extension method for example.
- The rule A stateless class or structure might be turned into a static type doesn't warn anymore for types instantiated through a Dependency Injection framework.
- The rule Namespace name should correspond to file location now deal with minus characters '-' in directories names transformed in underscore characters '_'.
- The rule A stateless class or structure might be turned into a static type and 'Non-static classes should be instantiated or turned to static' now consider that AutoMapper can create object instance and don't warn when this framework is using a type matched.
- The rule Non-static classes should be instantiated or turned to static doesn't warn anymore for ASP.NET Core HTML Tag helpers classes.
- The rule Non-static classes should be instantiated or turned to static doesn't match anymore UWP pages.
- The rule Avoid defining multiple types in a source file doesn't match anymore types with at least one declaration in a generated file like UWP App and MainPage with some partial declarations in 'App.g.i.cs'
- The rule Types declared in the same namespace, should have their source files stored in the same directory doesn't match anymore types with at least one declaration in a generated file, like for example UWP App and MainPage with some partial declarations in 'App.g.i.cs'
- The rule Types with disposable instance fields must be disposable now lists also methods that call a constructor of the type and increases the technical-debt by 4 minutes for each of those methods, to count the refactor effort to call Dispose() on all objects created.
- The notycode query Discard generated Types from JustMyCode now matches some rare generated nested type
Bugs fixed
- An ArgumentOutOfRangeException could be thrown when viewing a graph made of a single unselected namespace parent (name ending with .*) and setting the group-by mode to Namespace tree.
- When at starting time the graph canvas had a diagonal measuring less than 5 pixels a NullReferenceException could be raised.
- When at starting time the graph canvas heigh was so small that graph couldn't be shown, the zoom level could be negative or not-a-number and this could lead to an exception raised.
- Usage System.Span>T< and System.ReadOnlySpan>T< could provoke issue of the rule Don't use obsolete types, methods or fields.
- When opening the source declaration of a code element in a .razor file, don't try to go to line since this feature is not yet supported in Visual Studio 2019.
- The assembly mscorlib was added automatically in the list of third-party assemblies, even for .NET Core and .NET projects that don't reference it.
- Sometime when generating a report with the baseline set to same project and last analysis result available the baseline choosen was not the correct one.
Version 2020.1.2
Released on the 30th of June 2020
Improvements
- In VisualNDepend, menu are shown per default with lower case.
Bugs fixed
- Sometime a message claiming v2020.1 beta ended prevents to run the product.
- When running NDepend.Console.exe some indesirable traces were print on the console.
- A NullReferenceException could be thrown when starting Visual Studio 2017 with the NDepend extension.
- An InvalidOperationException could rarely be thrown when selecting a path in Project Properties > Paths Referenced > paths
Version 2020.1.1
Released on the 2nd of June 2020
Improvements
- When trend metrics are logged, analysis execution time is roughly divided by 2 within the context of Visual Studio extension or VisualNDepend.exe. The reason for this improvement is that trend metrics are now logged asynchronously out-of-process. When trend metrics are logged, the trend charts in the UI Dashboard gets refreshed with the last values logged.
- When resolving assemblies from a VS solution, implicit .props files (Directory.Build.props) and explicit .props files import are now supported.
- The heuristic that resolves an assembly from a Visual Studio project file now takes account of the tags <RuntimeIdentifier> and <RuntimeIdentifiers> if they are defined.
- When some assemblies cannot be resolved from a Visual Studio solution or project, a new tooltip panel appears in the Project Properties > Code to Analyze panel and explains how to reference some assemblies directly from the NDepend project.
- Better support for .NET Core 3.1: in NDepend > Project Properties > Code to Analyze > Directories that contains assemblies > Profile .NET Core 3.1
- When an NDepend project references a Visual Studio solution but doesn't reference any directory an error message was shown at analysis time even though application assemblies could be resolved. Now instead of an error a warning log is emitted.
- New Rule: Controller class name should be suffixed with 'Controller'
Less False Positives
- The rule API Breaking Changes: Methods has been modified so a method declared as public from a type that is not publicly visible anymore is not reported.
- The rules Potentially Dead Type, Potentially Dead Methods and Methods that could have a lower visibility don't warn anymore on ASP.NET MVC controllers and methods invoked by the infrastructure. The [NonAction] attribute is taken account to determine if a method is invoked or not by the infrastructure.
- The rule Mark assemblies with assembly version doesn't warn anymore if it detects that the assembly version is defined through a way different than an explicit AssemblyVersionAttribute.
Bugs fixed
- When hovering the application root element with the mouse in the Class Browser panel and the dependency graph was shown with no element selected, an exception was thrown.
- When right-clicking the Visual Studio Solution Explorer > Solution Element, or when right-clicking the NDepend class browser Application element the menu More > Open with Reflector was proposed. Clicking it resulted in a NullReferenceException. This menu is not proposed anymore.
- In a trend chart in the report charts section, when hovering a value the product version shown in the tooltip might be erroneous.
- In a trend chart in the report charts section, the highest range value might not be the highest product version available.
- Exporting to SVG a dependency graph that contains type names obfuscated could lead to an ArgumentException.
- A NullReferenceException could be raised when loading a graph based on a show coupling graph action.
- An UnauthorizedAccessException could be thrown when analyzing a VS solution or project file within a directory with some sub-directories that couldn't be accessed.
- Rarely after a .NET Framework update on the machine, many rules and queries appeared with compilation errors in the Queries and Rules Explorer panel.
- A NullReferenceException could be thrown when clicking the menu Code Diff on a changed element in Visual Studio, when Visual Studio was not installed on the C: drive.
- If there are exactly 20 assemblies to analyze an empty log about assemblies resolution information was logged.
- A Win32Exception could be sent when running NDepend.Console.exe on a Windows Server with no display.
- A NullReferenceException could rarely be thrown when centering on several nodes.
- An ArgumentException could rarely be thrown when viewing a new graph.
- A NullReferenceException could rarely be thrown when viewing a new graph.
- A NullReferenceException could rarely be thrown when closing VisualNDepend.exe.
- An InvalidOperationException could rarely be thrown when selecting a directory in Project Properties > Code to Analyze > Directories that contain .NET assemblies
- The analysis could throw a NullReferenceException on some obfuscated assemblies.
- Rarely a NullReferenceException could be thrown when editing a new query while a new analysis result got just loaded.
Version 2020.1.0
Released on 20th of April 2019
Dependency Graph Completely Rebuilt
- New navigation system:
- Drag and drop from Visual Studio solution explorer
- Expand/Collapse parent elements
- Search elements in graphs by name
- Call graph / Coupling graph / Inheritance graph ... generated with a single-click
- Center selected elements
- Undo / Redo
- Graph can be saved / loaded as a list of actions (and not as a list of nodes) so it gets refreshed when code changes.
- New layout options:
- Group-By Assemblies, Namespaces, Types, Clusters
- Filters to show or hide: third-party assemblies (like System or ASP.NET Core components), code generated, non-public elements.
- Box size proportional to element size, Edge width proportional to coupling strength
- Color conventions instantly identify caller/callee elements
- Complex graph simplified with Clusters
- Export to SVG vector format or PNG bitmap format.
- The graph shown in reports has been improved with the new Cluster feature.
Azure DevOps Extension Improvements
- Configuration tab added to customize the dashboard.
- Autocomplete for the build definitions list added, it's useful in case of many build definitions.
- Loading time optimized in case of big projects.
Bugs fixed
- In a session with diff but with no code coverage imported, if the first code query executed relied on code coverage, a NullReferenceException was thrown.
- When a PDB file contained a file path with more than 260 characters, a PathLongException was thrown. Now a warn log is shown instead.
- Under certain circumstances, the menu 'Open this dependency on matrix (keep only members involved)' didn't work.
- Under certain conditions a memory leak could happen after running a NDepend analysis from within Visual Studio 2019.
- The Dependency Matrix wasn't working well in DPI 350% and more.
- When closing VisualNDepend rarely an ArgumentException could be thrown.
- When loading a new analysis result rarely a NullReferenceException could be thrown.
- Rarely a NullReferenceException could be thrown while showing the Dashboard.
- Rarely an ArgumentException could be thrown when expanding/collapsing a row in the code query result.
- Rarely a COMException could be thrown within the Visual Studio 2019 environment.
- Rarely in the Dashboard when clicking the link 'none' to stop comparing against a baseline a NullReferenceException could be thrown.
- Rarely a NullReferenceException could be thrown while listing rules in a category.
- Rarely an ArgumentException could be thrown with editing a code query.
- Rarely a NullReferenceException could be thrown while showing the dependency matrix for the first time in session.
Version 2019.3.0
Released on 14th of October 2019
Source File Store Out Of The Box
- Source files parsed are now zipped at analysis time. This behavior is out of the box and transparent for the user, no configuration needed.
- This way a source file modified can be compared against its baseline version.
- When opening a source file declaration, if the source file is not found locally it is fetched from the analysis result zip store.
Source Diff Against Baseline from Everywhere
- New menu Diff since Baseline available everywhere:
- In the Visual Studio Code Editor window right-click menus.
- In the Visual Studio Solution Explorer window, any item right-click menus : Solution, Project, Project Reference, Folder, Source File, Code Element in Source File.
- In the NDepend main menu.
- In the NDepend code element right-click menu.
- This menu is enabled only when there are changes since the baseline.
- This menu now unzips the baseline source file to compare it with the current version.
- When more than one source file declarations available, this menu action edits a code query to show all concerned source files and let the user choose which one(s) to diff.
- When several source files are shown, they are grouped per directories. The result can be easily browsed because only directories with modifications are expanded.
- In query result, when code elements are grouped by source files and directories, the font used to write the files and directories names can now be bold, underlined or striked if the directory or source file has been added, contains changes or has been removed since the baseline.
- When right clicking a source file in query result, there is a new diff menu. This menu is enabled and set as double-click action if the file has been modified since baseline.
Improved Experience with Coverage Data
- The dialog NDepend Project Coverage Settings has been improved to highlight that importing coverage files from a directory is the recommended way to import coverage data.
- The menu Explore Code Coverage opens the Search Methods by Coverage panel and now methods are grouped per namespaces, assemblies and types and the result is shown as expanded until the type level.
- The menu Review How Diff are Covered by Tests opens the Search Methods by Coverage of Diff panel and now methods are grouped per namespaces, assemblies and types and the result is shown as expanded until the type level.
- In the Dashboard When clicking the Lines of code uncovered a new code query is edited that shows Code Excluded from Coverage Statistics
- Improved description of the default trend metric # Lines of Code Uncoverable.
New APIs
- New API methods ICompareContext.WasAdded(...) WasChanged(...) WasRemoved(...) on IAbsoluteFilePath and IAbsoluteDirectoryPath to track changes on source files and on directories that contain source files.
- New API method ExtensionMethodsTooling.TryDiffSource(this ICodeElement codeElement, ICompareContext compareContext, out string failureReason):bool to diff the older and newer version of the source of a code element. The older source file version is fetched from the source files zipped store, zipped at analysis time.
- New API properties ICodeBase.AnalysisResultFilePath and ICodeBase.SourceFiles.
- New API method ExtensionMethodsHelpers.TryGetSourceFileContent(this ICodeBase, IAbsoluteFilePath, out string content).
Code Diff are now Easier to Browse
- When editing a query or a rule that relies on diff, in query result the default double-click action on a code element changed since the baseline is to compare the source. This makes diff review session easier.
- In Visual Studio 2019,2017,2015,2013 and 2012 when diffing a source file, the diff panel is opened in the current Visual Studio instance no matter if the Source File Compare Tool option is set to a different Visual Studio version.
- New menu Visual Studio > NDepend > Code Diff since Baseline now opens the Search Code Elements by Change panel. The result can be easily browsed since code elements are now expanded until the type level. Also double clicking any changed element now opens sources diff.
Relative Paths Preferred
- By default a new NDepend project now references all paths as paths relative to the NDepend project file location.
- When changing paths or adding paths to an NDepend project, relative path mode is chosen if the output directory path is referenced as relative.
Other Improvements
- Right click menus on a code element menu have been simplified.
- Executing rules and queries is 10% faster within the Visual Studio extension and VisualNDepend.exe.
- The rule Methods name should begin with an Upper character doesn't match anymore explicit interface implementation methods that can be false positives because of their special naming.
- These rules now take account of JetBrains.Annotations.UsedImplicitlyAttribute to avoid reporting false positives on code elements implicitly used: Potentially Dead Types, Potentially Dead Methods, Potentially Dead Fields, Methods that could have a lower visibility, Types that could have a lower visibility, Fields that could have a lower visibility
- The default queries JustMyCode code elements and NotMyCode code elements now show the lines of code not just for methods but for all code elements.
- Default trend metric queries # Types, # Assemblies, # Namespaces now show the column number of lines of code in addition to issues and debt columns.
- The menu Code Metrics opens the Search Types by Size panel and now types are grouped per namespaces and assemblies and the result is shown as expanded.
- When clicking various numbers on the Dashboard (# Lines of Code, #Lines of Code diff, # Types...) code elements matched in the query result are now properly grouped and expanded for an improved browsability.
Bugs fixed
- In the case of an UNC directory path like "\\Server\Share" IAbsoluteDirectoryPath.DirectoryName was returning "Share" instead of and empty string "". In case of "\\Server\Share\Dir" IAbsoluteDirectoryPath.DirectoryName was returning "Dir" and this proper behavior didn't change in this new version.
- If at analysis time a source file exists but cannot be read (maybe because of no authorization) a warning log is shown.
- In Visual Studio when right clicking a Web Project, the NDepend menu for project was not shown.
- Attaching a new NDepend project to a VS solution declared on an UNC \\Server\Share path could fail.
- Rarely, when executing rules a NullReferenceException could be thrown.
- If only Visual Studio 2019 or 2017 is installed on the machine, attempting to open a source file declaration from VisualNDepend in VS wasn't working.
- When loading a new analysis result just computed rarely a NullReferenceException could be thrown.
- When running an analysis from NDepend UI, rarely ObjectDisposedException could be thrown.
- Rarely a NullReferenceException could happen when a new graph or a new matrix got computed.
- A NullReferenceException could happen when clicking a right click menu on a Visual Studio file in NDepend > Project Properties > Code to Analyze agt; VS solutions, and a running analyze was about to finish.
Version 2019.2.7
Released on 5th of September 2019
Bugs fixed
- SonarQube v7.9 broke all extensions, including the NDepend one. NDepend SQ v2019.2.7 extension now works with SQ v7.9.
- When NVidia Desktop Manager was activated, both VisualNDepend window and Visual Studio with NDepend extension installed window were not dockable into NVidia Desktop Manager gridlines.
- If the machine is en-US and the user forces another char than dot for decimal symbol in number format machine settings, values stored for trend metrics were not readable.
- Source files with extension .cshtml and .vbhtml spitted an unjustified warning at analysis time.
Version 2019.2.6
Released on 15th of July 2019
Report Improvements
- Improved navigation in the left grey menu of the report: empty groups have been pruned to avoid unnecessary clicks and formatting has been improved.
- In the report dashboard, Rules and Quality Gates titles are now clickable to go directly to Rules Summary and Quality Gates Summary sections.
- In the report, green/yellow/red counters for counting rules ok/violated and critical rules violated might not be in sync with green/yellow/red rule numbers on the dashboard because they were counting also the number of syntax errors in rules/queries.
- The code queries group Quality Gates is not anymore visible per default in the report since there is already a dedicated Quality Gates section menu.
Others Improvements:
- Rules and quality gates not-runnable were not counted in the numbers shown on Dashboard. This led to inconsistency with numbers found in the Rules Explorer panel and Report.
- In the Dashboard panel and in the Rules Explorer panel the number of rules violated used to count also critical rules violated but not anymore. This way the numbers are coherent and can be summed up.
- Clicking the total number of rules non-violated in the Dashboard panel now also lists these rules in the Rules Explorer panel.
Version 2019.2.5
Released on 3th of July 2019
Improvements
- The NDepend UI is now fully compliant with the new option Optimize rendering for screens with different pixel densities of VS2019 running on .NET 4.8.
- Support for the new SuppressMessageAttribute scope namespaceanddescendants.
- Case insensitive support for the SuppressMessageAttribute scopes. For example Module or module are both recognized, the same way namespaceanddescendants and NamespaceAndDescendants are both recognized.
- Visual Studio 2019 is now included in the default list of diff tools (NDepend < Options < Source Files Compare Tool)
- New Sonar Plugin option /d:sonar.cs.ndepend.skip=true to avoid triggering NDepend analysis.
Less False Positives:
- The rule ND1208:Methods should be declared static if possible doesn't warn anymore on methods of JSON or XML serialized classes.
- The rule ND1204:Overrides of Method() should call base.Method() doesn't warn anymore for override of methods of the Object class.
- The rules ND1207:Non-static classes should be instantiated or turned to static, ND1304:Classes that are candidate to be turned into structures, ND1801:Types that could have a lower visibility, ND1800:Methods that could have a lower visibility, ND2300:Collection properties should be read only don't warn anymore on JSON serialized classes.
- The rules ND1207:Non-static classes should be instantiated or turned to static doesn't warn anymore for types instantiated through one of these dependency injection frameworks: Microsoft.Extensions.DependencyInjection, Autofac, Microsoft.Practices.Unity, Ninject, StructureMap, SimpleInjector, Castle.Windsor, LightInject, Spring.NET, Lamar
- The rule ND1305:Avoid namespaces with few types doesn't match anymore namespaces named "Domain", "Enums", "Abstractions", "BaseClasses", "Settings", "Helpers", "Validators" or "Entities".
- The query ND3001:Discard generated Namespaces from JustMyCode now match namespaces generated by the Refit infrastructure (namespace named RefitInternalGenerated) to avoid false positives on generated types (typically the PreserveAttribute class).
Bugs fixed
- In VS2019 running on .NET 4.8 with Optimize rendering for screens with different pixel densities enabled, when Visual Studio windows is not displayed on the primary screen and when hovering the progress circle, the tooltip didn't appear.
- In VisualNDepend, when the form was not maximized, hovering the bottom right circle with the mouse might not maintain the tooltip window shown upon circle hovering.
- When hovering content of the dependency matrix, some tooltips appear. Now a location heuristic attempts to keep these tooltips in the screen that contains the mouse, avoiding tooltip clipping in some multi-monitors scenarios.
- When importing code coverage from DotCover, some async methods partially or totally covered might had a 0% value for coverage.
- When clicking the button save project changes in the NDepend Project Properties panel, an IOException can be thrown. In this situation now a proper error message box is shown instead of an exception report.
- In the NDepend Project Properties < Paths Referenced panel, right clicking a row could rarely lead to NullReferenceException.
- The dialog Source file declaration chooser let the user choose a source declaration among many. Clicking the Cancel button on this dialog used to pop an error message box that should not be shown.
- The NDepend Reflector extension might have problem installing with Reflector 10.1.
- A NullReferenceException was thrown when clicking the link Create Custom Metric form < Custom Code metric C.R.A.P.
- An ArgumentException could be thrown when NDepend tries to bind command in Visual Studio 2019.
Version 2019.2.4
Released on 4th of June 2019
Less False Positives:
- The rule ND2015 Don't call your method Dispose could return false positives when the method System.IDisposable.Dispose() was not resolved as third-party.
- The rule ND2203 Mark attributes with AttributeUsageAttribute doesn't match anymore abstract attribute classes (since AttributeUsageAttribute can be deferred to derived classes), nor attribute classes that have a base class tagged with AttributeUsageAttribute (since in this case attribute usage is inherited).
- The rule ND2211 Don't Implement ICloneable doesn't warn anymore for classes that derive from a class that implements ICloneable. In this case the issue must be fixed in the base class, or is maybe not fixable if the base class is declared in a third-party assembly.
- The default code query Discard generated Fields from JustMyCode now matches generated fields named _tagHelperStringValueBuffer this way such fields won't be matched anymore by any rule.
- The default code query Discard generated Namespaces from JustMyCode now matches namespaces Microsoft.CodeAnalysis and System.Runtime.CompilerServices. Sometime Roslyn can generate types in these namespaces.
Bugs fixed
- In VS2019 running on .NET 4.8 with Optimize rendering for screens with different pixel densities enabled, when opening NDepend session the query edition panel first tab shown could have invisible textbox.
- When starting VS2019 with the NDepend extension, a COMException could occur.
- When drag&dropping one or several assemblies from Windows Explorer to NDepend > Project Properties > Code To Analyze > application assemblies, the .NET profile of the project wasn't updated properly.
- When loading an analysis result a NullReferenceException could be raised.
Version 2019.2.3
Released on 15th of May 2019
Improvements
- Support for VS 2019.1.
- Walkthrough videos are now well referenced from within the product.
- A new Move the NDepend Menu to Top Level menu informs of the possibility to move back the NDepend main menu to top level in Visual Studio 2019 with the RestoreMenu extension.
- TeamCity plugin now fails upon any quality gate failure with an explanatory message.
Bugs fixed
- In Visual Studio 2019 running upon .NET Fx 4.8, with Optimize rendering for screens with different pixel densities enabled, some main controls appeared as blank.
- In Visual Studio 2019.1 Preview 3 running upon .NET Fx 4.8, with Optimize rendering for screens with different pixel densities enabled, when clicking the NDepend Project Properties > Code to Analyze > Folder button, some control location were wrong.
- In Visual Studio 2019.1 Preview 3 running upon .NET Fx 4.8, with Optimize rendering for screens with different pixel densities enabled, when showing the Start Page panel for the first time the recent projets DataGridView wasn't well located.
- Per default, the trend chart named Issues was showing the trend metric # Blocker/Critical/Major issues not available because it is now named # Blocker/Critical/High issues.
- Rarely at analysis time a ContractException could occur when an assembly is referencing another assembly with an empty string name.
- Rarely an ArgumentException could be thrown when looking for a temporary writable directory.
- When starting Visual Studio 2019 with the NDepend extension, a ComException could be raised.
Version 2019.2.2
Released on 22th of April 2019
Bugs fixed
- An ArgumentOutOfRangeException might raise when using the NDepend Visual Studio 2019 extension.
- The heuristic to locate assemblies from a VS solution file is now smarter and can take account of special custom output directories.
- In the Project Properties > Code to Analyze, when an assembly is not resolved from a Visual Studio solution or project, the option 'Resolve directory' is still shown. But clicking it now shows a message box that explains that in this situation it is recommended to by-pass the Visual Studio file and resolve the assembly directly.
- Assemblies generated by Azure Function projects are now well resolved.
- When assemblies are resolved from a HubApp solution that have a shared project (.shproj extension) NDepend attempted to resolved an assembly for the .shproj. However .shproj doesn't produce a dll but only shared code and resources embedded in others assemblies of the solution.
- When closing Visual Studio with the NDepend extension, rarely an ObjectDisposedException could raise.
Version 2019.2.1
Released on 1st of April 2019
- New beginner menu for the Visual Studio extension
- New Alt+H VS shortcut to show the dashboard
Improvements
- Improved support to analyze assemblies of applications compiled with x86, x64 and ARM.
- TeamCity extension now supports issues suppression through SuppressMessageAttribute.
Bugs fixed
- When a quality gate was warning but not failing, the warn message mentioned the fail threshold instead of the warn thresold, leading to wrong message where the actual quality gate value was lower than the warn threshold shown.
- The heuristic to locate assemblies from a VS solution file is now smarter. If it fails now it also investigates the parent directory of $(ProjectDir), the $(SolutionDir) and the parent directory of the $(SolutionDir).
- Search type by number of lines of code was excluding abstract types instead of excluding just interfaces.
- v2019.2.0 won't install with Visual Studio 2019 16.x where x > 0. v2019.2.2 will.
- If in VisualNDependOptions.xml the <NDependVersion> value was tweaked with a not a proper version string, other options were not parsed and set to default.
Version 2019.2.0
Released on 14th of March 2019
- NDepend 2019.2 supports Visual Studio 2019.
- Applications developed with .NET Core 3.0 can now be analyzed in addition to applications developed with .NET Core 2.2, 2.1, 2.0, 1.1 and 1.0.
Bugs fixed
- When referencing a Visual Studio solution that have .NET Core projects from an NDepend project file, third-party assemblies in NuGet packages might not be resolved.
- When attaching a new NDepend project to a VS solution, the NDepend project platform (like .NET Core, .NET Fx...) wasn't updated and was still equal to the default .NET Fx 4.x value.
- On a Windows machine with US globalization and date format changed from default, trend charts didn't load correctly.
Version 2019.1.1
Released on 18th of February 2019
Bugs fixed
- When mixing .NET Core and .NET 4.X projects in the same VS solution and outputing assemblies in the same directories, some assemblies might not be resolved.
- When using an absolute path for the output directory in a VS project, the corresponding assembly might not be resolved.
Version 2019.1.0
Released on 31th of January 2019
New Features
- Possibility to reference one or several Visual Studio solutions from an NDepend project file
- Support for OpenCover xml coverage files
- Support for Visual Studio coverage binary file
- Improved exclusion of code elements from coverage statistics with an attribute
New Security Rules
- Don't use CoSetProxyBlanket and CoInitializeSecurity
- Don't use System.Random for security purposes
- Don't use DES/3DES weak cipher algorithms
- Don't disable certificate validation
- Review publicly visible event handlers
- Pointers should not be publicly visible
- Seal methods that satisfy non-public interfaces
- Review Commands Vulnerable to SQL Injection
- Review Data Adapters Vulnerable to SQL Injection
New Rules
- Don't Implement ICloneable in category .NET Framework Usage > System
- Avoid fields with same name in class hierarchy in category Naming Conventions
- Avoid various capitalizations for method name in category Naming Conventions
- Avoid mutually-dependent types in category Architecture
Improvements
- When analyzing some application assemblies, third-party assemblies set is not gathered anymore from the NDepend project but is inferred from analyzed application assemblies. As a consequence, when the third-party referenced assembly set is changing, changes are automatically taken account.
- When saving a snapshot picture of the Graph, Matrix or Metric View, the file name gets incremented to avoid overriding previous snapshots.
- In Visual Studio, when opening an NDepend project or a solution with an NDepend project, and the NDepend project has no analysis result yet available, the NDepend Project Properties window is shown.
- It is now possible to use the type System.StringComparer in a CQLinq query. This is useful to define the proper string comparer when using a dictionary, a lookup or a hashtable indexed by string.
- When facing analysis warnings like 'Assembly {AsmReferenced} is referenced by {Asm} but is not found.', an explanation is added to the first warning 'To resolve such warning you can append the assembly directory in NDepend Project Properties > Code to Analyze > Directories that contains .NET assemblies to analyze'.
- New option in Analysis Settings to show (or not) the Analysis Error List panel when user runs analysis, the default behavior until now is to show this panel.
- On the Start Page, a new section One-Off Analysis has been added to underline the fact that when the user demands for a quick analysis, an overridable temporary project is created behind the scene.
- Code coverage technologies supported are now listed on the Start Page.
- Properties of IType MethodsAndContructors and InstanceMethodsAndContructors are now obsolete because of the typo and 2 properties have been added MethodsAndConstructors and InstanceMethodsAndConstructors.
Bugs fixed
- A crash could happen in NDepend VS extension or VisualNDepend if some debt or annual-interest values were overflow. Now the "overflow" string is shown instead of these values.
- In VS2017 only, in the various DataGridViews (Rules and Queries, Analysis results logs, Queries errors) when clicking a cell the corresponding column header was shown as selected in blue.
- When having a lot of application and third-party assemblies to analyze, when refreshing the Project Properties > Code to Analyze panel upon assemblies resolving, grid views were slowing down with flickering.
- When changing the set of code analyzed this grid view was cleared Project Properties > Code to Analyze > Folders > Folder selected > Assemblies in folder selected.
- The version of a Visual Studio solution might not be determined. This could result in resolving failure of assemblies compiled from a solution file.
- When opening a solution file that leads to start a new Visual Studio 2010 instance, NDepend didn't know about the solution loaded. Hence if a NDepend project was attached to the solution it didn't get loaded. Or else, if no NDepend project.
- In the Rules and Queries panel, when unchecking Project Rules and then running analysis, this check appeared as checked once new new analysis result loaded.
- If the first tag '<MetricIndex' was not closed, in an XML trend metric store values file in the directory $ProjectOutputDir$\TrendMetrics, an exception was thrown instead of an error message.
- When watching the Info panel for a code element, the Debt metric name wasn't shown as an url clickable to obtain help from the online documentation.
- In rare situations, after loading an analysis results in VisualNDepend the progress shown on the Windows task bar was still seen as not completed.
- When mouse wheel on metric view while loading an analysis result a NullReferenceException might be raised.
- Rarely an ArgumentOutOfRangeException could be raised after clicking a right click menu on a code query in the Rules and Queries explorer.
- Rarely a Win32Exception could be raised when closing an analysis result session.
- Rarely an ObjectDisposedException could be raised when hovering a code element to update its description in the info tooltip.
- Rarely an ObjectDisposedException could be raised when loading an analysis result in the UI.
- Rarely an ArgumentException could be raised when updating queries run progress in UI.
- Rarely a NullReferenceException could be raised when starting an analysis in the UI.
- Rarely when hovering the metric view with no color shown a IndexOutOfRangeException could be thrown.
- Rarely an InvalidOperationException could be raised when showing a new dependency graph.
- Rarely a NullReferenceException could be raised when opening a source code file in Visual Studio.
Version 2018.2.1
Released on 20th of September 2018
Bugs fixed:
- Sometime running the NDepend analysis can lead to an error claiming that no application assembly found during analysis.
Version 2018.2.0
Released on 11th of September 2018
New Features:
- Issue suppression with SuppressMessage attribute
- Support for .NET Core 2.2 Preview
- Deferred Visual Studio 2017 Extension Loading
Improvements:
- New README.txt file with the NDepend zipped files that explains the purpose of each file.
- New default keyboard shortcut Alt+A for "Search Any Code Element by Name", applicable both in Visual Studio and VisualNDepend.
- In Visual Studio, when no NDepend project is opened, several empty NDepend panels might still be visible. Each of these empty panel now have a 'Close all NDepend panels' button.
- The PowerTool 'Technical Debt Evolution Since Baseline' now displays the DebtRating evolution.
- PowerTools solution is now based on Visual Studio 2013 (compatible with VS2015 and VS2017) and the directory .\NDepend.PowerTools.SourceCode\obj is not shipped anymore.
- NDepend.Helpers.IReadOnlyList<> and NDepend.Helpers.IReadOnlyCollection<> can now type the result of a code query.
- When opening the source file declaration of a field, an abstract method or a default constructor, a message explains that such declaration is not yet available, and the parent type declaration is opened.
- When browsing to add an assembly to a project that currently doesn't have any application assembly, the default browse directory is now the project file parent directory. It used to be a .NET Framework assemblies directory.
- In VisualStudio, when selecting a project on the NDepend start page Most Recently Used list, the project is now shown as first one after selection.
- Improved documentation for the rule 'Avoid duplicating a type definition across assemblies'.
- When editing a code query with less than 100 matches, the result tree was always seen as all expanded. Now the tree result remembers which node is collapsed or expanded during the query edition and the 'expand-all behavior' occurs only when all nodes are collapsed.
Less False Positives:
- The rule 'Avoid methods with too many parameters' doesn't match anymore these situations, consequences of lower-level problems like: a method that overrides a third-party method with many parameters, a constructor that calls a base constructor with many parameters, a P/invoke method tagged with DllImport
- The rule 'Avoid methods with too many overloads' doesn't match anymore overloads that results from lower-level overloads, like when overriding a third-party method with many overloads or a constructor that call a base constructor.
- mshtml COM/Import namespace and all its types and their members are now considered as not-my-code. Issues won't be reported on this code.
- Microsoft.Office.* COM/Import namespace(s) and all their types and their members are now considered as not-my-code. Issues won't be reported on this code. Especially issues related to the rule "Interface name should begin with a 'I'" broken by many interfaces in these namespaces.
- Types tagged with System.Runtime.InteropServices.GuidAttribute, that represents a COM type defined elsewhere are now considered as not-my-code. Issues won't be reported on this code.
- The notmycode query "Discard generated Types from JustMyCode" now matches types generated by the compiler that are nested whose name starts with "<>c".
- The rule 'Avoid the Singleton pattern' now matches only singleton types with mutable instance fields because singleton pitfalls result from anarchical access and modification of instance data.
- The rule 'Potentially Dead Methods' now also ignores methods tagged with OnDeserializingAttribute and OnSerializedAttribute.
- The rule 'Avoid having different types with same name' now doesn't match anymore web types suffixed with "Service", "Model", "Controller", "Page" or "Pages".
- The notmycode query 'Discard generated Types from JustMyCode' now also matches Entity Framework ModelSnapshot generated class. This way this generated class won't violate quite a few rules anymore.
- The VB.NET generated namespaces My and My.Resources where reported by the rules 'Avoid namespaces dependency cycles' and 'Avoid namespaces mutually dependent'.
API Improvements:
- New interface NDepend.Issue.ISuppressMessage
- New flag enumeration NDepend.Issue.SuppessMessageScope
- New class NDepend.Issue.RuleIdOrCategoryKind
- New property getter IAnalysisResult.SuppressedMessages:IReadOnlyList<ISuppressMessage>
- New property IRule.Id:string and IRule.ExplicitId:string
- New extension method NDepend.Issue.ExtensionMethodsIssue.ComputeSuppressedMessagesOnBaseline(this ICompareContext, IDictionary<RuleIdOrCategory, IReadOnlyList<ISuppressMessage>>s)
- New extension methods NDepend.Query.ExtensionMethodsQuery.GetIssues(this IRule, IQueryExecutionSuccessResult, IDictionary<RuleIdOrCategory, IReadOnlyList<ISuppressMessage>>)
- New extension methods NDepend.Query.ExtensionMethodsQuery.TryGetQueryIdAndExplicitId(this string queryString, out string id, out string explicitId)
- New property NDepend.Issue.IRuleIssues.SuppressedIssues
- New property NDepend.Issue.IIssuesSet.AllSuppressedIssues
- New method NDepend.Issue.IIssuesSet.SuppressedIssues(IRule)
- New property NDepend.Issue.IIssue.IsSuppressed
- New properties on NDepend.TechnicalDebt.Debt and AnnualInterest structures: IsOverflow/IsPositiveOverflow/IsNegativeOverflow
Bugs fixed:
- When infering the assemblies to analyze from a .NET Core VS solutions or a VS project, if an assembly name is different than its VS project file name, the assembly was not resolved.
- When infering the assemblies to analyze from a .NET Core VS solutions or a VS project, if the output path is not the standard one, the assembly was not resolved.
- With Visual Studio 2017 15.6, 15.7 and 15.8 when starting VS by double-clicking a solution file, if a NDepend project was attached to this solution it was not loaded at VS startup time.
- In Visual Studio when loading an analysis result, now NDepend panels get a frozen appareance. This avoids some uncertain behavior and makes it clear the panel is not usable for a little while (typically 1 or 2 seconds).
- Because of an anti-virus, BadFormatException is thrown when loading some NDepend assemblies. When starting VisualStudio with the NDepend extension in this situation, instead of crashing the extension, a MessageBox is now shown that explains the problem.
- When starting NDepend UI or NDepend VS extension, an UriFormatException was thrown when NDepend was installed in the special Parralels directory "\\.psf\Home" because the class System.Uri is not compatible with this directory format.
- When a third-party base class is named Attribute but is not an attribute class, its derived types had IType.IsAttributeClass set to true.
- In query result, the text show/hide in the parent row of code elements targeted by the query wasn't well drawn when scrolling vertically.
- Sometime the analysis with report failed because of some problem to delete some children files or directories in the output directory.
- The sequence of fields "culpritFields" for matches in the rule "Avoid transforming an immutable type into a mutable one" was matching immutable field instead of mutable ones. Now it matches mutable fields.
- In the Visual Studio extension, controls related to project and analysis on the Start Page were not disabled at analysis time. Problems could happen when clicking these controls during an analysis.
- In the UI, after an analysis a message box could claim that the baseline cannot be loaded because the baseline chosen was the analysis result, just overriden by the analysis.
- When hovering a row in the query result, if it was a parent row with expand/collapse symbol, this symbol was blinking.
- On fast mouse move in the query result, some parent row expand/collapse symbol could remain in hovered state while not hovered anymore.
- When start run an analysis, then ask to delete a query or a group in Queries and Rules Explorer, and then let the delete confirmation dialog open until the new analysis result result loaded, when confirming the deletion an exception was raised.
- When starting Visual Studio with the NDepend extension installed, and closing VS as soon as possible, a NullReferenceException or a InvalidCastException could be thrown.
- In an application empty with no code found in any method, a misleading error message was shown when attempting to switch to CyclomaticComplexity metric in the metric view.
- In Query Result, Expand/Collapse vertical scrolling animation could be quite slow, especially on high DPI.
- From Project Properties > Code to Analyze > Browse Application Assemblies in Folder, when opening this dialog more than once, matched assemblies might not be populated automatically on dialog opening.
- When computing a large matrix or a large graph and closing Visual Studio, a NullReferenceException could be thrown.
- It was possible to get an ArgumentOutOfRangeException thrown when dealing with debt and annual-interest value higher than 29 247 years. The exception has been fixed but 29 247 years still represent an unsurpassable limit.
- In Project Properties > Debt Settings with a screen DPI between 110% and 140% some controls were truncated.
- In Dashboard with a screen DPI between 110% and 140% the button menu "Explore Debt" was truncated.
- In Dashboard with a screen DPI between 110% and 140% the progress bar could be hovered by the XXX/YYY progression text.
- The text on the Dashboard Guide Tooltip was Y truncated with a screen DPI of 125%.
- In the Start Page with a screen DPI between 110% and 140%, the arrow pointing to the 'Install VS Extension' button was hovering it .
- In the Start Page with a screen DPI between 110% and 140%, the arrow pointing to the 'Analyze VS solutions and VS projects' link was hovering it.
- In VS2017 only, in the various DataGridViews (Rules and Queries, Analysis results logs, Queries errors) when clicking a cell the corresponding column header was shown as selected in blue.
- In Visual Studio, when loading an analysis result, clicking the 'add new tab' button in the Search or QueryEdit panel lead to NullReferenceException.
- Trying to get documentation from text in some special code queries could lead to an InvalidOperationException thrown.
- Rarely a NullReferenceException could be thrown when changing a group activation in Queries and Rules Explorer.
- Rarely a COMException could be thrown when opening or closing a NDepend windows in Visual Studio.
- Rarely a NullReferenceException could be thrown when right clicking a code element in the code editor with VS2017.
- Rarely when hovering a trend chart in the Dashboard, an ArithmeticException could be thrown.
- Rarely when hovering a trend chart in the Dashboard, an ArgumentException could be thrown.
- Rarely a NullReferenceException could be thrown when closing a NDepend Project Properties dialog (like Define Baseline) while an analysis is loading.
- Rarely a NullReferenceException could be thrown when clicking the Dashboard button 'Run Analysis and Build Report' while an analysis is loading.
- Rarely a NullReferenceException could be thrown when hovering the dependency matrix with the mouse.
- Rarely a NullReferenceException could be thrown when right clicking a path in the Project Properties > Paths Referenced panel.
- Rarely an IOException could be thrown when starting an NDepend executable.
- Rarely a NullReferenceException could be thrown when exporting the result of a code query to a document.
Version 2018.1.1
Released on 17th of May 2018
Bugs fixed:
- Running NDepend with the new .NET Fx v4.7.2 provoques many compilation errors in code queries because this new version of the framework introduces an extension method ToHashSet() with the same signature as the NDepend.API extension ToHashSet() method. NDepend v2018.1.1 introduces the extension method ToHashSetEx(). To easily solve this issue just replace "ToHashSet" with "ToHashSetEx" in all your .ndrules and .ndproj files that contain your code queries and rules.
- Default code queries and rules and queries generated, now rely on ToHashSetEx() and not on ToHashSet().
- Special compilation error description with special how-to-fix explanation for the ToHashSet() method problem described above.
- A ThreadAbortException could rarely be thrown while editing a code query.
- On an overly complex code query, asking for completion list with typing the dot key could freeze the UI.
Version 2018.1.0
Released on 7th of March 2018
Improvements:
- Support for Dark Theme
- Support for Visual Studio 2017.6
- Support for .NET Core 2.1 Preview
2 new rules and less false positive:
- A new default rule DDD ubiquitous language check is proposed in the group Naming convention to check for custom domain terminology.
- New default rule Properties and fields that represent a collection of items should be named Items. in the group Naming convention.
- The rule Don't call your method Dispose could warn when overriding the Dispose() method of an interface that is not IDisposable, like IHttpModule.Dispose().
- The rule Avoid methods with name too long doesn't match anymore test methods because it is considered as a good practice to name unit tests in such a way with a meaningful name.
- The rule Types that could be declared as private, nested in a parent type doesn't match anymore types with extension methods that cannot be nested. Also it doesn't advise anymore to nest a base class or a base interface into its unique child class.
- The rule Classes that are candidate to be turned into structures now returns mostly true positive. The rule now requires that instance fields of the class must be typed with value-type, requires the class to be immutable and requires the class to have no parameterless constructor.
- The rule Avoid empty interfaces doesn't match anymore empty interfaces that implement at least one other interface. Such interface can be considered as not empty, since implementing it means that sub-interfaces members must be implemented.
- The rule Overrides of Method() should call base.Method() doesn't match any more properties getters and setters that are not supposed to have enough logic to satisfy this rule constraint.
- The rule Methods should be declared static if possible and the 3 queries Test Methods; Methods directly called by test Methods and Methods directly and indirectly called by test Methods now also support the FactAttribute to define a test method.
- The rule Instances size shouldn't be too big has been improved to avoid matching classes that derive from some DevExpress components and that derives from classes in System.Component and System.Xml.
- Annual interests of issues of the rule Instances size shouldn't be too big is now 10x times higher for structure than for classes, because of the performance penalty to deal with large structure values at runtime.
API Improvements:
- New API method ExtensionMethodsString.GetWord(this string identifier) to extract words from code element identifiers (ICodeElement.SimpleName)
- New API methods ExtensionMethodsString.Aggregate(this IEnumerable<string> seq, string separator), FirstCharToUpper(this string), StartsWithAny(this string, params string[]), EndsWithAny(this string, params string[]) to ease string manipulation.
- All www.ndepend.com urls are now referenced as HTTPS.
Bugs fixed:
- Regression bug: in v2017.3.X NDepend.Console.exe wasn't returning a non-zero exit code when some Quality Gates were failing.
- Regression bug since v2017.2.2, when running analysis, when a log string has too large width (# line chars) or too large height (# of lines), an ArgumentOutOfRangeException was thrown.
- In query edition, documentation for mscorlib, System and System.Core code elements might not be resolved on Windows 10.
- When editing a code query in VS2017 with a VS solution loaded, Ctrl+X to cut the selection was not working.
- Taking a snapshot of the graph with Ctrl+Space when some node were selected, didn't preserve the node selection in the snapshot picture.
- Hovering certain code queries source code with mouse could provoke a freeze.
- The default trend metrics '# Rules', '# Rules Violated' and '# Critical Rules Violated' could throw an InvalidOperationException for rules violated with no issue (typically rules with prefix 'warnif count == 0').
- The default code rule 'Avoid changing enumerations Flags status' could throw an InvalidOperationException if both mscorlib and System.Runtime were resolved.
- The default code rule 'Avoid namespaces mutually dependent' could throw a DivideByZeroException when 'lowLevelTypesMethodsUser.Length' was zero.
- In VisualStudio, the first tab shown in Queries Edition panel or Search panel, could have an appropriate few pixels margin up.
- When at analysis time the source file path cannot be obtained from PDB file, the error shown in NDepend UI was wrongly mentionning 'assembly written in a language that cannot be parsed by NDepend'.
- When a PDB file was containing source file paths that are not absolute paths, the metric lines of code was set to 0 for concerned methods.
- When more than 40 application and third-party assemblies were resolved, the Dependency Matrix snapshot in the report showed a border with explanations about the limit of 40. The Horizontal and Vertical border expanations were swapped.
- When clicking the button Skip on the Report built dialog, and immediately hover the dependency matrix, a NullReferenceException was thrown.
- An overflow exception could be thrown when trying to infer a BreakingPoint value from a very large Debt value and a very small AnnualInterest value.
- Rarely a concurrent access problem could happen at analysis time.
- Warning logs about an assembly not found yet referenced by N assemblies, is now better presented and more readable when N gets large (100+).
- Rarely a concurrent access problem could happen at analysis time when filling the log list.
- Rarely an IO exception could occur when creating a temporary project from assemblies and attempting to analyze it.
- Rarely an ObjectDisposedException could occur when showing the metric view panel first time during a session.
- Rarely a NullReferenceException could be thrown at analysis time.
- Rarely a TypeInitializationException could be thrown at analysis time.
- Being quick enough to click View Report while the session was not completely loaded resulted in a NullReferenceException.
- Rarely an InvalidCastException could be thrown with NDepend extension loaded in VS2017.
- Activating the feature of showing compilation progress in TaskBar in Visual Studio could rarely provoke a COMException.
Version 2017.3.2
Released on 13th of November 2017
Bugs fixed:
- The rules 'Avoid types initialization cycles' and 'Avoid namespaces dependency cycles' both rely on the extension method NDepend.Helpers.ExtensionMethodsEnumerable.Append(). .NET Standard 2.0 and .NET fx v4.7.1 propose a similar extension method System.Linq.Enumerable.Append(). To avoid an ambiguous extension method syntax error, both rules have been refactored to now call ExtensionMethodsEnumerable.Append() without the extension method syntax.
Version 2017.3.1
Released on 13th of October 2017
Bugs fixed:
- The rules 'Classes that are candidate to be turned into structures' and 'Non-static classes should be instantiated or turned to static' could emit error if the assembly System.ComponentModel.DataAnnotations.dll was referenced.
- An ArgumentException could be throw in rare situations when running an analysis.
- Activation problem could happen when using VMWare and VirtualPC on the same machine.
Version 2017.3.0
Released on 4th of October 2017
.NET Core, .NET Standard, NuGet support
- Full support for .NET Core 2.0, 1.1 and 1.0
- New .NET Profile for .NET Core.
- .NET Standard assembly support.
- New heuristic to resolve third-party assemblies in NuGet packages.
- .NET Framework profiles now also has NuGet directories to resolve third-party assemblies in NuGet packages.
Improvements:
- Visual Studio responsiveness improved when NDepend is running a background analysis.
- Guide tooltips are shown to beginners on Code Query edition, on Dashboard, on Graph, on Matrix, on Metric View, and on Search panel.
- Heuristic improved when resolving complex method overloads between the Visual Studio code model and the NDepend code model.
- Heuristic improved when resolving complex method overloads between the .NET Reflector code model and the NDepend code model.
- The tooltip on rows when choosing assemblies to analyze was shown only for 2 seconds, this delay has now been extended to 32 seconds.
- When during an analysis no application assembly is resolved, an error is still shown but the Analysis Result is not persisted anymore. The reason is that an Analysis Result cannot be opened with a baseline Analysis Result with no assembly resolved. Hence doing so prevents this misleading situation from happening.
- In analysis logs, Quality Gates that warn are shown in a log warning and Quality Gates that fail are shown in a log error.
- Enhanced Start Page design that highlights VS install, VSTS extension and new project creation for beginners.
- In the panel shown upon hovering with the mouse the StatusBar circle, a tooltip has been added to explain the Red/Yellow/Green color meaning taken by the circle.
- Don't warn anymore if no assembly is found in a .NET Profile directory (like "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\WPF"), because this is a normal situation and the user cannot do anything about that.
- Don't warn anymore about third-party assemblies that doesn't contain any type.
- When an assembly and its PDB file are loaded from two different directories, this situation is explained in a new informational log in the analysis logs.
- When an invalid PDB file is found for an assembly, the warning log now explains that this situation can happen either when the PDB file corresponds to a different version of the assembly or when the PDB file is corrupted (typically the 'PDB corrupted' case is often the symptom of PDB file instrumented by a Visual Studio profile tool or another tool).
Less false positive:
- Issues on the WPF infrastructure code are now filtered thanks to the many default rules improvements.
- Issues on the ASP.NET and ASP.NET Core infrastructure code are now filtered thanks to the many default rules improvements.
- The notmycode query on types now matches generated DataSet and TableAdapterManager classes and their nested types.
- The notmycode query on types now matches ASP.NET Startup and BundleConfig classes.
- The notmycode query on types now matches the AutoGeneratedProgram types generated by the test infrastructure.
- The notmycode query on methods now matches default constructors generated by the compiler and also implicit event adder remover methods.
- The notmycode query on fields now matches property backing fields generated by the compiler, and ASP.NET, WindowsForm, WPF and UWP fields generated by the various designers.
- The notmycode query on fields now matches fields named mappingSource for DataContext classes.
- The rule 'Event handler methods should be declared private' has been renamed 'Event handler methods should be declared as private or protected' and avoid matching protected event handlers methods.
- The rule 'Fields should be marked as ReadOnly when possible' could match enumeration fields or literal fields under certain circumstances.
- The rule 'Classes that are candidate to be turned into structures' classes instances memory footprint threshold is now 8 bytes (it used to be 16 bytes).
- The rule 'Classes that are candidate to be turned into structures' doesn't match anymore entry point classes like 'Program'.
- The rule 'Classes that are candidate to be turned into structures' doesn't match anymore ASP.NET Core ViewModel classes.
- Issues of the 'Classes that are candidate to be turned into structures' now have an Info severity.
- The rule 'Non-static classes should be instantiated or turned to static' doesn't match anymore classes named 'Program' and also ASP.NET pages, ViewModel, controls and master pages that are instantiated by the ASP.NET infrastructure.
- The rule 'Non-static classes should be instantiated or turned to static' doesn't match anymore Entity Framework ModelSnapshot, DbContext and Migration classes.
- The rule 'Non-static classes should be instantiated or turned to static' doesn't match anymore abstract classes and test classes.
- The rule 'Methods that could have a lower visibility', 'Avoid public methods not publicly visible' and 'Potentially Dead Methods' don't match anymore property getters/setters of classes that implement INotifyPropertyChanged.
- The rule 'Potentially Dead Methods' doesn't match methods of the ASP.NET type global that derives from System.Web.HttpApplication.
- the rule 'Avoid methods potentially poorly commented' doesn't match anymore Entity Framework classes with large uncommented methods.
- The rule 'Avoid public methods not publicly visible' now also matches auto-property getters and setters in this situation.
- The rule 'Avoid public methods not publicly visible' now also matches auto-property getters and setters in this situation.
- The rule 'A stateless class or structure might be turned into a static type' doesn't warn anymore on classes named 'Program' generated by designers.
- The rule 'A stateless class or structure might be turned into a static type' doesn't warn anymore on test classes.
- The rule 'Potentially Dead Types' doesn't match anymore Entity Framework ModelSnapshot classes are used only by the EF infrastructure.
- The rule 'Types with disposable instance fields must be disposable' doesn't match anymore ASP.NET pages, controls and master pages.
- The rule 'Namespaces with poor cohesion (RelationalCohesion)' now only takes account of JustMyCode types.
- The rule 'Types name should begin with an Upper character' doesn't match anymore the ASP.NET special type named '_Default'.
- The rule 'Do not raise too general exception types' now only applies to JustMyCode methods.
- The rule 'Constructor should not call a virtual method' now only applies to JustMyCode methods to avoid reporting issues on generated code.
- The rule 'Avoid the Singleton pattern' matches also singleton in situations with the static field is typed with an interface implemented by the singleton type.
- The rule 'Avoid namespaces with few types' now only matches namespaces with types defined in JustMyCode.
- The rule 'Avoid namespaces with few types' now contains a list of common infrastructure namespace names (that the user can complete) that should be not matched.
- The rule 'Avoid namespaces with few types' doesn't match on namespace with same name as its parent assembly, to avoid warning on new Visual Studio projects.
- The rule 'Property Getters should be immutable' don't match anymore a property getter that assigns a field with a similar name, to avoid matching lazy initialization situations.
- The rule 'Static fields naming convention' now matches only JustMyCode fields.
- The rule 'Avoid having different types with same name' now doesn't match anymore per default types named "Initial", "Startup" and "SwaggerConfig".
- The threshold on size-of-instance in the rule 'Classes that are candidate to be turned into structures' is now 8 bytes instead of 16 bytes.
- The rule 'Methods should be declared static if possible' now requires that all callers of the method be in JustMyCode, else having a method declared as static would break the call from the code generated like when a WPF Connect() method is binding a method to an event.
- The rule 'Methods should be declared static if possible' doesn't match methods with a visibility protected that doesn't match well with static methods.
- The rule 'Methods should be declared static if possible' doesn't match methods not yet implemented that throw a NotImplementedException.
- The rule 'Methods should be declared static if possible' doesn't match methods of the ASP.NET type global that derives from System.Web.HttpApplication.
- The rule 'Methods should be declared static if possible' doesn't match methods of the ASP.NET ApiController that derives from System.Web.Http.ApiController.
- The rule 'Methods should be declared static if possible' doesn't match test methods.
- The rule 'Methods that could have a lower visibility' doesn't match anymore methods declared in a non-public type, that could have the visibility internal, because such situation is caught by the rule 'Avoid public methods not publicly visible'.
- The rule 'Types declared in the same namespace, should have their source files stored in the same directory' now ignores types declared in ASP.NET Global.asax file, that is typically in the root dir of the VS project.
- The rule 'Instances size shouldn't be too big' doesn't match anymore types that represent WPF, WindowsForm and ASP.NET forms and controls nor EntityFramework classes.
- The rule 'Types with disposable instance fields must be disposable' don't warn anymore for types that implement the dispose pattern with a Dispose(bool) method.
- The rule 'Namespace name should correspond to file location' is case-sensitive and now provides a 'justACaseSensitiveIssue' to differentiate between case-sensitive issues with other issues.
- The rule 'Namespace name should correspond to file location' now takes account of assembly name and this decrease the number of potential false positives returned.
- The rule 'From now, all methods added should respect basic quality principles' doesn't match async methods here to avoid false positives because of special compiler tricks.
- The rule 'Assemblies with poor cohesion (RelationalCohesion)' now doesn't match anymore notmycode code elements.
- The rule 'Empty static constructor can be discarded' now doesn't match anymore notmycode code elements.
- The rule 'Avoid methods with too many local variables' is de-activated by default to avoid false-positives.
- The rule 'Boxing/unboxing should be avoided' has been disabled by default to avoid noise in issues found by the NDepend default rule set.
- The rule 'P/Invokes should be static and not be publicly visible' now matches only publicly visible methods (it used to match public method in non-public classes).
- The rule 'Avoid duplicating a type definition across assemblies' don't match anymore the types named "AutoGeneratedProgram" generated by the test infrastructure.
Bugs fixed:
- When the NDepend extension was installed in VisualStudio 2017, VS menu > Tools and Updates > Marketplace was not able to gather extensions from the Marketplace because the NDepend extension version was "2017" and not a real System.Version like "2017.X".
- When changing the NDepend project attach to Visual Studio solution mode (to .sln or to .suo file) through the Options dialog, the wanted mode was not necessarily persisted.
- Third-party types, methods and field with a visibility internal in a third-party assembly tagged with InternalsVisibleTo attribute were not seen as used by the application assemblies.
- This IMethod flags IsPropertyGetter/IsPropertySetter/IsIndexerGetter/IsIndexerSetter/IsEventAdder/IsEventRemover were not set when appropriate on explicit method interface implementation
- When an assembly name or an url defined in a Visual Studio project file contains some characters in "()&@;%" NDepend didn't read it properly.
- Fields tagged with System.NonSerializedAttribute were not seen as tagged with this attribute.
- Some auto-property getters/setters could be merged into lambda code when the NDepend project option Merge Generated code is activated (activated by default).
- Running a query such as 'from a in Assemblies select new { a, seq = a.AssembliesUsingMe.Where(aa => aa.AsMethod.IsStatic) }' was throwing a NullReferenceException.
- Running a query such as 'from a in Assemblies select new { a, x = new ICodeElement[]{ a.ParentCodeBase as IAssembly } }' was throwing a NullReferenceException.
- NbVariables and ILNestingDepth were too high for methods that contains anonymous methods and lambda.
- Project names and code element names that contained non-ASCII characters (Hebrew, Arabic, sian characters) where not shown properly on Dashboard and InfoTooltip.
- If an assembly name contained some Turkish dotless i letter, it was not resolved.
- Some problem could happen when unzipping NDepend into a directory with some Turkish dotless i letter.
- In VB.NET, a field related to an event didn't have the flag IField.IsEventDelegateObject set.
- It was not possible to add new line to the Submit Feedback form Feedback textBox.
- In the NDepend API there are new NDepend.Helpers.ExtensionMethodsString.ContainsAny(this string, string's) extension methods.
- When having outdated CQL style being not a rule query running on baseline like in "SELECT METHODS WHERE WasRemoved", an exception could happen.
- NDepend wasn't taking account the DotCover feature to discard methods tagged with System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute (or declared in type tagged with this attribute).
- A method with 0 lines of code in NDepend can have a PercentageCoverage of 100%, if such method contains no lines of code but still is covered by unit test.
- In case of 100% or 0% coverage, the Dashboard was not showing the code coverage numbers.
- When an analysis result is opened, and screen height is 1080px or lower, and DPI is 175% or upper, the tooltip shown while hovering the circle was vertically truncated.
- On Start Page, when scrolling the main area, buttons repainting could have problem.
- IType.DepthOfDeriveFrom(IType baseClass) didn't have a null check contract for baseClass argument.
- When starting Visual Studio with the Matrix View panel tab visible (but not the panel itself visible), when clicking the tab, the treemap appeared much smaller than the panel size.
- Running multiple analysis on a slow VM build machine could lead to analysis fails because of a time-out not long enough.
- Symantec Endpoint Protection anti-virus can report problem on the NDepend assembly ICSharpCode.SharpDevelop.Dom.4NDepend.dll. Now the exception message has been refined to explain the user the problem and how to solve it by restoring the concerned assembly.
- Rarely a FileLoadException could be throw when starting ViusalStudio with the NDepend extension.
- Rarely a NullReferenceException could be thrown when looking at the documentation from the code query editor.
- Rarely, the NDepend VisualStudio extension could throw InvalidCastException.
Version 2017.2.2
Released on 1st of August 2017
Bugs fixed:
- NDepend might not detect Visual Studio 2017.X installed instances with X > 1.
- An error could be shown when detecting Visual Studio 2017 instances, on machine where a VS2017 has been installed.
- NDepend now resolves an assembly from a Visual Studio project file, when the assembly file is in the folder is ".\bin". This is useful because ASP.NET solution output their assemblies in the ".\bin" folder.
- NDepend now resolves an assembly from a Visual Studio project file, when the project is .NET Core based on .NET Framework.
Version 2017.2.1
Released on 27th of April 2017
UI improvements:
- When the user chose assemblies to analyze that are not compiled in DEBUG mode, with PDB file missing, a warning message is shown to the user.
- When analyzing a project for the first time, the dependency graph doesn't show anymore third-party assemblies if the total number of assemblies (application and third-party) is higher than 30 and if the number of application assemblies is higher or equal to 5.
- The menu Rules > "View Edition Panel" became "View Editor Panel"
Default rules enhanced
- The notmycode query 'Discard generated and designer Methods from JustMyCode' now also matches types whose source file name ends with ".generated.cs" and ".generated.vb".
Bugs fixed:
- When having outdated CQL style query running on baseline like "WARN IF Count > 0 IN SELECT METHODS WHERE WasRemoved", an exception could happen.
- An activation issues could happened when using a Parallels virtual machine.
- In the Dashboard, sub titles in Quality Gates, Rules and Issues where editable.
- The heuristic to find an assembly file path from a Visual Studio project had this problem: when the VS project is generating the assembly in a directory name "\bin", if a sub-directory "\bin\debug" exists, ".\bin\debug" directory was chosen instead of ".\bin".
Version 2017.2.0
Released on 21th of April 2017
Interactive Abstractness vs.Instability Diagram in Report
- The Abstractness vs Instability diagram provided in the report is now a javascript interactive control.
- Hovering a dot shows the corresponding assembly name and values.
- A search textbox lets filter a subset of assemblies by name
Improved SonarQube Integration
- For each issue, now the technical debt measure and the severity are imported into the SonarQube system.
- For each issue, now the Description and HowToFix texts of the parent rule are shown in the SonarQube interface.
- The user doesn't need anymore to do the NDepend rule registration step with NDepend.SonarQube.RuleSetBuilder.exe before analyzing.
- In case of analyzing several Visual Studio projects (which is the most common case), now the user doesn't need to do anything special to make sure that the NDepend analysis is executed once.
- Bug fixed: To be considered as activated, an activated rules must have all its parent group (recursive) activated. Only the direct parent activation was checked.
Severity Levels changed
- Severity levels have been changed to follow the Azure DevOps and Agile Alliance terminology.
- Level Info is now Low - level Minor is now Medium - level Major is now High.
- Severity level Blocker and Critical haven't been touched.
- Info/Minor/Major levels are now tagged as Obsolete to preserve ascendant compatibility.
Main dashboard enhanced design
- Better design thanks to alignment, padding and right font choice
Default rules enhanced
- The default rule Collection properties should be read only doesn't return anymore properties declared in generated code (that are not in JustMyCode).
- The default rule Boxing/unboxing should be avoided doesn't return anymore boxing usage in methods declared in generated code (that are not in JustMyCode).
- The default rule Fields that could have a lower visibility doesn't match anymore fields tagged with System.Xml.Serialization.XmlArrayAttribute and XmlArrayItemAttribute.
- The default rule Base class should not use derivatives has been improved to avoid warning when a base class uses a derivative that is nested in the base class, and declared as private.
- The default rule Classes that are candidate to be turned into structures doesn't match any more serializable classes, because serializable type are mutable and a structure should be immutable.
Activation Bugs fixed
- It could happen that the activation form was showing the message "Evaluation not started yet" without a "Start Evaluation" button.
- The activation issue with code x23AC has been resolved.
- A few v6 licenses still valid until their anniversary date in 2017 couldn't be activated with v2017.
- NDepend could report a problem about Machine Date at activation time.
Others Bugs fixed
- Integration in VS2017 now works even if VS2017 is not installed on the C: drive
- When a new version is available, in professional mode, the upgrade button now redirect to a more accurate url.
- Rarely an exception could be thrown when opening the project and NDepend was running the code queries.
- An exception could be thrown on very particular assemblies obfuscated with ConfuserEx that don't contain the assembly name in the main module manifest.
- When running Visual Studio with NDepend, a Microsoft.VisualStudio.ProjectSystem.ProjectException could be thrown when deleting a source file in the Solution Explorer.
- If the channel between the TeamCity server and the TeamCity agent doesn't supports SSL versions 2 and 3 and TLS 1.0, an explanatory error message now explains the user the error reason and what to do.
- An ExternalException could be thrown when closing session
- An ObjectDisposedException could be thrown when moving the vertical scroll in the query edit text box.
- An OverflowException could be thrown when moving the color cursors in the metric view.
- An InvalidOperationException could be thrown when showing the NDepend Project Properties > Code to Analyze panel.
- A NullReferenceException could be thrown when analyzing some obfuscated assemblies.
- A Win32Exception could be thrown when a report has just been built and showing the form explaining differences between report and interactive UI.
- A UriFormatException could be thrown at startup time, when NDepend is executed from a network drive.
- An ArgumentOutOfRangeException could be thrown by clicking the query result button Expand All.
- An ArgumentException could be thrown when showing a new graph.
- An InvalidOperationException could be thrown when in Visual Studio a build failed and the user had the NDepend option "Stop Build on First Error" activated.
- A NullReferenceException could be thrown when exporting query result to graph, matrix or metric view
Version 2017.1.1
Released on 7th of February 2017
- Resolve VS2015 and VS2017 .NET Core assemblies from their VS project files thanks to an heuristic that resolves output directories like ".\bin\debug\netstandard1.6" and @".\bin\debug\netcoreapp1.0".
- Severity levels icons improved.
- Dashboard up/down icons improved.
- Show a message when assemblies cannot be resolved from VS solution or project files. This message explains that 'search asselblies in folder (recursive)' can be used instead.
- Improvement in Annual Interest estimation of rules 'Potentially Dead Methods' and 'Potentially Dead Types'.
Version 2017.1.0
Released on 20th of January 2017
Detailed v2017.1.0 release note can be found here.
- New licensing and release scheme
- New support for Azure DevOps (VSTS)
- .NET Core support
- Support for Visual Studio 2017
- Enhanced Visual Studio Integration
- Smart Technical Debt Estimation
- Quality Gates
- Better Issues Management
- Dashboard Improvements
- Default Rules-Set Improvements
- Enhanced Baseline Experience
- Report Improvements
- Code Query Improvements
- NDepend.API Improvements
Bugs fixed:
- Code contracts conditions were not injected in NDepend.API implementations. Hence for a code query like from m in Methods let x = ((IMethod)null).NewerVersion() select m where NewerVersion() extension method requires by contract the this reference to be not-null, the user got a NullReferenceException instead of a Contract exception.
- When two analysis results were obtain in x86 and x64 processes, methods relying on float literals constants could be flagged with CodeWasChanged, even if the code was not changed.
- In code query result, when sorting values in a column by clicking the column header, if the matched code elements were grouped by code element parents (assemblies, namespaces and/or types), the code element parents were not sorted.
- In code query result, when showing less or equals than 100 matched items that are grouped by code elements parents, the parent grouping is shown as expanded. In this situation, when sorting values of a column by clicking the column header, the parent grouping was then collapsed.
- In code query result, when both the vertical and horizontal scrollbars were shown, it was not possible to scroll horizontally to the maximum right of the most-right column.
- In code query result, when setting manually a very large width, for each header row, an horizontal line appeared in the void area at the right.
- When hovering a code query domain in the query editor, like "Methods" in "from m in Methods select m" or "from m in Application.Methods select m", no documentation was shown.
- During code query edition, the completion box was showing the extension methods NewerVersion and OlderVersion for types others than ICodeElement types.
- During code query edition, no completion suggestions was shown if the carret was at the same location than the beginning char '/' of a comment.
- During code query edition, some completion items were present with duplicated overloads.
- Editing a query like from m in Methods select new { m, callers = new List<IMethod>{ null } } could provoke a NullReferenceException when browsing the code query result.
- When creating a newer and older temporary projects from the Build Comparison dialog, once both analysis results were loaded, a message box was shown claiming to reload the newer project that was changed. This message bow now doesn't show.
- Support for ARMv7 assemblies.
Version 6.3.0.8686
Released on 29th of April 2016
Improvements:
- When coverage data in the input coverage file(s) don't correspond to the code in assemblies analyzed, an analysis warning explaining the situation is now shown to the user.
- Faster SonarQube run on multi-modules projects with the possibility to start the NDepend analysis through RulesRunner before sonar run, to generate the report to be used in the config.
- Support for Beyond Compare 4 in the default diff tools list.
Default rules Improvements:
- The default rule "Don't call your method Dispose" now filters methods that override another method, because the name cannot be changed.
- The default rule "API Breaking Changes: Methods" and default query "API: New publicly visible methods" reported a false positive when a public regular property became an auto-property (or vice-versa). Its source code have been updated to prevent this.
- The default rule "API Breaking Changes: Methods" now reports a match when the method return type has changed.
- The default rule "API Breaking Changes: Fields" now reports a match when the field type has changed.
- The rule "Move P/Invokes to NativeMethods class" now accepts NativeMethods to be nested class.
Bugs fixed:
- Rarely, after an analysis run in VisualNDepend or NDepend VS Extension, an InvalidOperationException could be thrown.
- In some complex lambda/async/await case with Roslyn, using the option Merge Generated Code could make NDepend crashes when loading persisted analysis results.
- SonarQube plugin was broken when reporting issues on field without source file declaration defines.
- In Visual Studio 2015 Update2 the NDepend circle appeared left of new SourceControl controls in the VS status bar, it now appears right.
- In VisualStudio any version, when VS was starting with the status bar hidden, when making the status bar visible the NDepend circle control was not visible in the VS status bar. It is now there in such situation.
- The return value of the properties IMethod.IsExtensionMethod, IMember.IsGeneratedByCompiler, IMember.IsObsolete, was always false on assemblies compiled for Portable Class Library (PCL) and Universal Windows.
- Some primitive type might not be resolved when using Portable Class Library (PCL) profile like Profile 111.
- The metric SizeOfInst was not computed properly when type forwarded were involved in third-party assemblies, like Portable Class Library (PCL) case.
- IType.IsAttributeClass was not set for "System.Attribute" and IType.IsExceptionClass was not set for "System.Exception".
- If a query or rule name was starting with one or several white character(s), it was not highlighted properly in the query editor.
- When showing the VS 2013 Dark skinning, the NDepend help panel text fore color was still black and hence unreadable.
- When (Ctr+V) pasting a directory path in the BreadCrumbEdit directory, in the forms "New Project" and "New Rule File", when clicking OK the pasted path was not took account.
- When CodeRush emits DotCover like coverage file, it can emit double values and NDepend wasn't prepared to this case, leading to coverage data reading stopping suddenly.
- In the Queries and Rules Explorer windows, when collapsing all group, it was possible that no group was selected yet the Delete group button was still enable, leading to a NullReferenceException when clicking on it.
Version 6.2.1.8630
Released on 9th of December 2015
Bugs fixed:
- Rarely, after an analysis run in VisualNDepend or NDepend VS Extension, an InvalidOperationException could be thrown.
Version 6.2.0.8620
Released on 2th of December 2015
Improvements:
- #IL Instructions, IL-Nesting-Depth, IL-Cyclomatic-Complexity values might change in case analyzing assemblies compiled with Roslyn. This is because these low-level code metrics depend on how the compiler emits IL code, and Roslyn emits IL in a slightly different way than the VS2013 C# and VB.NET do.
- New default code query in the 'Design' group named 'Methods that create disposable object(s) and that don't call Dispose()' that is designed to be be easily refactored to be transformed into a code rule adapted to custom needs.
- In code query/rule result, the expand/collapse animation is now faster on large Y delta.
- In case running an analysis, or loading an analysis result, fails because no application assemblies can be found: after showing the error description message box, instead of returning to Start Page, the NDepend project is now loaded to let the user fix the assemblies location issues through NDepend Project Properties panels.
- When using the option "Merge Code Generated by Compiler", some merging problems occured for application methods declaring a lambda/anonymous method that did not capture any state.
- Directory and file paths of any kind (absolute, relative, with variable or environment variable) cannot contain anymore one of these characters: *|?<>" Nor the tab character '\t' nor the colons character : , except when the character colons is at position 1 and a letter is at position 0. This restriction can prevent potential issues including System.NotSupportedException when accessing a path. As a consequence path variable names (and values) and environment variable names, used in a path cannot contain anymore the characters *"?
Enhanced support for code compiled through VS2015/Roslyn:
- Auto-property getters/setters compiled with VS2015 now have a break-point. For such a setter NDepend didn't see that it now has one line of code (for getter it was fine).
- When analyzing assemblies compiled with VS2015, #variables counted variable generated by the Roslyn C# and VB.NET compiler.
Bugs fixed:
- The new Visual Studio 2015 Update 1 Git controls in the Visual Studio status bar were interacting with the NDepend Visual Studio extension status bar control. As a consequence this was provoking VS UI freezing.
- When starting VisualNDepend or VS with the NDepend extension, NDepend attempts to kill the process "TabTip.exe" that runs the service "Touch Keyboard and Handwriting Panel Service". As explained here http://stackoverflow.com/a/14716720/27194, a Windows bug with this process provoques an unmanaged StackOverflowException from System.Drawing.dll, that provoques crashing VisualNDepend.exe (or VisualStudio that hosts NDepend). This problem occurs when working with one or several DataGridView with a large number of rows (1000+). Doing so can happen frequently when working with NDepend code query/rule results.
- For third-party types, interfaces implementation didn't propagate from base third-party type to derived third-party type.
- Third-party types, methods and fields that are declared as protected or protected internal and that are used by application code, were not resolved as third-party code elements.
- When starting VisualStudio with NDepend installed, rarely an ArgumentException claiming that the NDepend install path is not an absolute path could be thrown.
- Assemblies produced by some VS2015 Universal App project were not resolved properly from the .sln file.
- When using a baseline with TeamCity or TFS, the date of the baseline in the report could be set to now. More generally the date of baseline could be wrong if the user was tweaking the .ndar files names and files hierarchy, and this is now all fixed.
- In VisualStudio, when a NDepend project A is attached to a Visual Studio solution, and when another NDepend project B is loaded while the Visual Studio solution is opened, the global menu caption "Load project XYZ attached to the VS solution" was refering to the loaded project B and not the attached project A (but the menu handler was working fine).
- When hovering the metric view with the mouse, very rarely a InvalidOperationException could be thrown because of a race condition on a collection change.
- When right clicking certain file in VS solution explorer, a MissingMethodException could be thrown.
- When right clicking certain file in VS solution explorer, a COMException or InvalidOperationException could be thrown.
- When importing coverage data from DotCover coverage files, some coverage data might be missed for methods that use complex lambda expressions.
- In the Query Explorer panel, when clicking the button Previous\Next selection to select a set of queries with same status (like all rules violated), no query was selected but the button Delete Query wasn't disabled, clicking it provoked an exception.
- In VisualNDepend or NDepend in VS, when a session was opened with a baseline, when running an analysis and after loading the analysis result, the new session had the same baseline as the previous session, regardless of the project baseline in UI settings. Typically, if the project baseline in UI settings is equal to Most recent Analysis result available, this behavior was wrong and is now fixed.
- NDepend.Path bug fixed where "D:/Foo bar".ToAbsoluteDirectoryPath().IsChildOf("D:/Foo".ToAbsoluteDirectoryPath()) was true instead of false. https://github.com/psmacchia/NDepend.Path/issues/4
- Very rarely, a type, method or field dependency could be wrong for a type, method or field declared in an application or third-party assembly, that contains types forwarded.
- Very rarely,an ArgumentOutOfRangeException could be thrown when editing a code query.
- Very rarely, an InvalidOperationException could be thrown when an analysis is running, on receiving an analysis log, while closing VisualStudio.
- Very rarely, an ArgumentException or a NullReferenceException could be thrown while zooming the dependency graph.
- Very rarely, a System.Runtime.InteropServices.ExternalException when viewing the metric view. Now NDepend catches the exception. This was due to KB3045171 https://connect.microsoft.com/VisualStudio/feedback/details/1331855/kb3045171-crash-gdi-with-system-drawing-drawing2d-addstring
- Very rarely, a NullReferenceException could be thrown while hovering with the mouse the Metric view color cursors while loading a NDepend project.
Version 6.1.0.8600
Released on 24th of September 2015
Improvements:
- The control used to choose a directory is now a BreadCrumb edit control. This provides the same user experience as Windows Explorer.
- When creating a temporary project, the previous temporary project file is backed-up to avoid losing any changes the user May have made.
- If VSIXInstaller.exe (launched by NDepend.VisualStudioExtension.Installer.exe) returns error code -532462766, an explicit message explains that "To solve this issue, please retry to run NDepend.VisualStudioExtension.Installer.exe as admin."
- In the Dependency Matrix, maximum thresholds for rows and columns (10K) and for total cells (6M) have been increased to better utilize the power of current hardware.
- All menus that show the list of stored analysis results for the current project now start with a new button with text "Browse for an NDepend analysis result file (.ndar extension)". This allows users to load any analysis result stored in a .ndar file.
- In the New Project form, the directory presented by default is now the user document directory, since that is the default location that VS uses to create its projects.
- On the NDepend Start Page project click, the menu "Open Containg Folder" is now proposed.
- On the NDepend Start Page project click, a "Problem with this Project File" menu item is now proposed when the NDepend project has issues. Clicking it shows a message box with more detailed explanations (XML corrupted, project file not found...).
- In the NDepend Error List panel, when pressing the filter buttons, the vertical scroll bar (of the logs DataGridView) position is kept unchanged if possible.
- When right-clicking a Rule file, the "Delete" menu item now has the more explicit text: "Remove Reference to this Rule File"
- Previously, in Project Properties > Path Referenced, if no analysis result was loaded, the user could not go to the Rule Files edit. Now, if the user tries to go to the Rule Files edit in this situation, a message box explains the user why she cannot.
- Previously, in Project Properties > Path Referenced, if an analysis was running, the user could not go to edit most path sections. Now if the user tries to go to edit a path section in this situation, a message box explains the reason the user cannot.
- Some new warnings are now shown at analysis time, when some code queries or rules have the same name (case-insensitive), or when some don't have a name defined.
- StartPage design improvements
- New Overview Tour Video link on the Start Page.
NDepend.API:
- Convenience extension methods have been added in NDepend.Analysis.ExtensionMethodsProjectAnalysis: BuildAnalysisResultRefFor(this analysisResultFilePath) ; LoadAnalysisResultFromFile(this project, analysisResultFilePath) ; LoadCodeBaseFromAnalysisResultFile(this analysisResultFilePath)
- A convenience extension method CanAllPathsReferencedBeResolvedAsAbsolute() has been added in NDepend.Analysis.ExtensionMethodsProjectAnalysis to know if all paths referenced by a project can be resolved as absolute paths.
- Two methods have been added in NDepend.Project.ExtensionMethodsProject : GetOutputDirectoryAbsolutePath() and GetDefaultOutputDirectoryAbsolutePath()
Bugs fixed:
- The number of rules in green cells (i.e rules activated + not-violated) shown in the report left vertical panel, was wrong for sub-groups of rules.
- When loading a large code base analysis result, at the end of the load, the UI might freeze because of a Garbage Collection lasting several seconds (this is not an NDepend bug but a .NET v4.6 GC bug actually).
- When thousands of logs were displayed in the NDepend Error List panel, resizing this panel could freeze the UI for seconds.
- When thousands of logs were displayed in the NDepend Error List panel at analysis time, this could freeze the analysis for seconds or even minutes.
- In the NDepend Error List panel, some log row could have a too large height.
- Some special C# compiler errors like CS0006 (metadata could not be found) don't contain a [line,column] position in source file and made the NDepend error parsing code failed.
- When compiling a code query the method AppDomain.DoCallBack() is called. When this method throw an unexpected exception, now a proper query compilation error is shown to the user.
- NDepend specific files (like project files) are now better protected from concurrent process accesses. In very rare situations the previous implementation could cause a freeze.
- The TeamCity plugin didn't handle properly the case 'warnif count > X' where a X greater than 0.
- The TeamCity plugin didn't handle well the situation where the NDepend project output directory contained an environment variable or a path variable in its definition.
- In paths starting with an environment variable referenced from the project file, some characters like parenthesis were not supported which prevented to use environment variables like %ProgramFiles(x86)%. Now, in addition to letters and digits, these characters are supported in the environment variable name _(){}[]$*+-"#',;.@!?
- When exporting N code elements to the matrix rows or columns, maximum thresholds were applied to NxN instead of Nx(# actual rows) or (# actual columns)xN.
- The diff algorithm failed to pair the older and newer versions of a generated-by-compiler interface that has no member.
- When choosing to define a temporary baseline for comparison, the main window behind was enabled, allowing actions that could cause a crash.
- If all trend metric queries were defined under a rule file, it was not possible to create a new trend chart.
- When setting the horizontal splitter vertical distance to a small value on one of the left or the right side of the dependency matrix, the other horizontal splitter side might not be properly aligned.
- On rare occasion, an ArgumentException could be thrown when attempting to release some resources, when storing or restoring the attached NDepend project file path from the VisualStudio 2013 or 2015 .suo file.
- Changing the width of the Code Query Edit panel in DPI 200% could cause an ArgumentOutOfRangeException.
- The NDepend Project Coverage Settings form had some minor visual issues on high-DPI.
- In VisualStudio, right-clicking an item in "TypeScript Virtual Projects" could result in a NotImplementedException being thrown.
- When using PowerTools some assertions could be broken when reaching the Console.BufferHeight. To prevent this, we now set Console.BufferHeight to the maximum value which is Int16.MaxValue -1.
- When running on Windows XP, if a query group was selected, it didn't render well.
Version 6.0.1.8585
Released on 23th of July 2015
Bugs fixed:
- On Windows 10, opening some NDepend dialog from VS2015 could sometime provoke VS2015 UI to freeze.
- Right clicking an HTML file in VS2015 RTM could lead to a NotImplementedException thrown.
- A misleading NullReferenceException could be thrown at analysis time in rare case.
Version 6.0.0.8580 RTM
Released on 16th of July 2015
Improvements:
- The {new version notify balloon in Windows taskbar} is shown less often, especially if the user has clicked the button 'Skip this Version' in the new major version form (also fixed in a new uploaded version 5.4.2.8440).
- Installing or uninstalling the Visual Studio extension is faster and a panel is showing install/uninstall progressing.
- Terminology: "Matrix Vertical Header" has been replaced with "Matrix Rows" and "Matrix Horizontal Header" has been replaced with "Matrix Columns"
- The rule "Don't call your method Dispose" now only applies on JustMyCode methods.
- The rule "Types with too many fields" now don't count anymore types outside of JustMyCode.
Bugs fixed:
- TFS Workspaces that do not map the '\src' folder directly throw an ItemNotMappedException.
- In NDepend.TFS2013.Deploy.exe at the end, to hold "Please press a key to continue...", Console.Read() was used instead of Console.ReadKey().
- On Windows 10 or Windows 8.1, when .NET v3.5 wasn't installed, a P/Invoke method wasn't working well and this provoked major issue at NDepend analyzing time.
- NDepend VisualStudio extension didn't install in VS2015 Community.
- When the Visual Studio status bar was hidden, starting Visual Studio with the NDepend package provoked an exception to be thrown.
- Right clicking a NuGet package under a reference in Visual Studio Solution Explorer could lead to an InvalidOperationException.
- In the Query Explorer panel, when selecting a category of Queries (like Rule Violated) no query was selected but the button Delete Query wasn't disabled, clicking it provoked an exception.
- Both overloads of ExtensionMethodsQuery.CompileMany(IEnumerable<IQuery> ...) were throwing an ArgumentException if two or more queries had the same query string.
- The {new version notify balloon in Windows taskbar} wasn't cleaning properly the tray icon after the balloon disappeared.
- Directories and files paths processing now remove white-space characters at the right of each path component, to have a behavior compliant with System.IO.
- A memory-leak in Visual Studio when running NDepend analysis has been fixed.
- When closing a NDepend project and mouse hovered the matrix window during the close process, an exception could popup. This typically happenned when clicking the menu NDepend > Project > Close Project, and then mouse hovered the Matrix view.
- Setting the option "Build > Build Options > Show Error List when Build is Stopped on First Error" could rarely lead to a COMException.
- Right clicking the VS code editor could rarely lead to a COMException thrown.
- Very rarely, righ-clicking a code query in the Rules and Queries Explorer, could lead to an IndexOutOfRangeException.
Version 6.0.0.8560 RC3
Released on 16th of June 2015
Bugs fixed:
- Loading 2 analysis results for diff could throw a NullReferenceException.
- Right clicking a Type, Method or Field in Visual Studio 2012 Solution Explorer could lead to a FileLoadException if VS2013 is not installed.
- When having the option Build Options > Stop Build on First Error activated, within VS2013 that has SHFB (Sandcastle Help File Builder) installed and a .shfbproj loaded, a COMException could occur.
- Very rarely, a NullReferenceException could occur when closing an NDepend project in VS2013.
Version 6.0.0.8555 RC2
Released on 12th of June 2015
Enhancements of following default rules:
- Collection properties should be read only
- Pure methods should be tagged with PureAttribute
- Property Getters should be immutable
- Types that could be declared as private, nested in a parent type
- Types with too many methods
- An InvalidOperationException could be raised while analyzing some code with code coverage imported and merge compiler generated code activated.
- An InvalidOperationException could be raised while analyzing some code with merge compiler generated code activated.
- A NullReferenceException could be raised while analyzing some code with merge compiler generated code activated.
- In the report, the Assemblies Build Order section didn't show a necessarily correct order
- NDepend.TFS2013.Activities.Design.dll was missing.
- Better check of NDepend product installation / deployment to warn the user about issue as soon as possible.
Version 6.0.0.8550 RC1
Released on 8th of June 2015
Visual Studio Integration Enhancement:
- Integration with Visual Studio 2015
- NDepend Windows location / size / docking status are now properly stored and restored accross Visual Studio executions.
- NDepend Visual Studio extension is now based on VS package API (VSIX), while it was based on VS Addin API. As a consequence the extension is faster to load and the overall extension stability is strengthened.
- Full support of Visual Studio keyboard shortcut assign + easy way to set/reset default NDepend shortcut.
- Enhanced NDepend global menus.
- When a code element right clicked in VS is yet unknown to NDepend, a menu proposes to either add the parent assembly to the list of assemblies to analyze, or, if the parent assembly is already there, the menu proposes to refresh the analysis result by re-building the VS solution and then re-running the NDepend analysis.
- A NDepend project can now be attached to a VS solution file (.sln) or to a VS solution user options file (.suo).
- When attaching a NDepend project to a VS solution file (.sln) the user is not prompted anymore to reload the solution. The VS solution file is written when closing the solution, or when requiring VS Save All.
- NDepend context menus are now also available from Solution Explorer > Solution node, and under Solution Explorer > Source File > Types, Methods and Fields nodes (VS2013 and VS2015 only).
- NDepend proposes 3 Visual Studio Build handy features: Show Build Progress in TaskBar ; Stop Build on First Error ; Show Error List when Build is stopped on First Error
Rules Enhancement:
- With NDepend v6, Rule Files can be created and shared amongst NDepend projects. This is useful to define company-level standard rules sets, and get them applied by all teams.
- A detailed Description and HowToFix section has been added for each default code rule. You can choose both in the NDepend UI and the NDepend report, to view the rule description or source code.
- It is now possible to insert tags <Description> and <HowToFix> in code rules source code comment.
- More than 30% of default code rules source code have been refined to offer more detalled results with less false positives.
UI Enhancements:
- The Metric View can now display a second metric by coloring the treemap elements. Hence two code metrics can be displayed at once.
- In Rules and Queries result, percentage Code Coverage values are now displayed with a proportional green/red color scheme.
- Support Visual Studio Blue, Dark, Light Themes, and VS2010 Blue theme.
- The NDepend UI now scales properly whatever the DPI settings, 100%, 125%, 150%, 200% and 250%.
- Class Browser and Queries Explorer Treeview have now OS explorer theme.
- Shaded animation when transitioning from one dependency graph to another, doesn't flicker anymore!
- In query/rule result windows, when showing a sub-result in a native window, the native window height is now well sized.
- When saving a query or a rule edited, the overall edition status is preserved (this includes the scroll bars position, the cursor position and the selection length).
- When pinning a description, the info panel background color is set to grey.
- NDepend > Tools > show Options Form, now remembers which last option panel was shown last time the Options Form closed.
Analysis Enhancements:
- Types and methods generated by the C# and VB.NET compilers to handle language constructs like lambda, iterators, anonymous and asynchronous methods, can now be merged within their declaring methods.
- Async methods can now be filtered in or out, in code queries/rules through the new property IMethod.IsAsync
- A directory that contains coverage file(s) to parse to import coverage data, can now be specified in the coverage section of a NDepend project. This facility is useful to just dump all coverage files in a directory at build time, without having to care for their number, nor their names, nor the .NET code coverage technology used.
- When multiple valid assemblies with same name are found in the set of directories referenced by a NDepend project, instead of reporting an error, one is chosen according to this logic: First the one with highest version, else, the one with biggest file size else the one most recently modified else any single one, they are reported as all same.
- In VisualNDepend.exe Windows taskbar, loading and analyzing progress is shown.
Integration with TFS
- Integration with TFS2013
- Both TFS Version Control and TFS Git scenarios are supported.
- Define thresholds to yield TFS build warning or error, upon number of NDepend Rules and Critical violations.
- An NDepend section is available in the TFS Build Summary. Verbose NDepend logs are available in the TFS Build Logs.
- The NDepend report can be opened from the TFS Build Summary
- A TFS Web Access extension is provided to open the NDepend report from the TFS Web UI.
- Facility to store and consolidate NDepend Trend Metrics across TFS builds
- Facility to define a TFS prior build as a NDepend baseline for comparison
- Automatic fetch of coverage files from TFS + automatic coverage files conversion bin to xml to let them be consumed by NDepend
- The NDepend analysis process is spawned across a dozen of TFS activities. 2 default Build templates Tfvc and Git are proposed to invoke these activites. Advanced scenarios can then be handled by invoking these activities from custom Build template.
Integration with SonarQube
- Integration with SonarQube v5.
- Both NDepend default and custom code rules can be monitored by SonarQube.
- NDepend rules parent group names are used as SonarQube rules tags
- Visualization of the NDepend issues locations in source code from within the SonarQube UI.
- New NDepend rules Descriptions and HowToFix sections are also visible from the SonarQube server plugin.
- The communication from NDepend to SonarQube occurs through XML files: hence NDepend must run on Windows but the SonarQube server can run on any OS.
Integration with TeamCity
- Integration with TeamCity v8 and v9
- New NDepend TeamCity Build Step that takes a NDepend project to analyze
- NDepend report integrated into TeamCity build result
- NDepend Rules violations mapped as TeamCity inspections and TeamCity statistics
- NDepend Critical Rules violations mapped as TeamCity errors and TeamCity statistics
- Facility to store and consolidate NDepend Trend Metrics across TeamCity builds
- Facility to define a TeamCity prior build as a NDepend baseline for comparison
- NDepend report and analysis result stored as TeamCity build artifacts
- The TeamCity agent that runs NDepend must be a Windows machine, but the TeamCity server can run on any OS.
NDepend.API:
- The new type NDepend.Project.ExtensionMethodsProject contains overloads of TryResolveAbsolutePathFromProject() to simplify absolute path resolution from paths referenced from a NDepend project.
- An AnalysisException is now sent when calling the method RunAnalysis() and when no application assemblies could be resolved.
- New property: IMethod.IsAsync.
- New method in class: NDepend.CodeQuery.ExtensionMethodsQuery : GetCQLinqExecutionTimeOut() ; FilterRecentViolationsOnly() ; TryGetQueryDescription() ; TryGetRuleHowToFix() ; CompileMany(this IEnumerable<IQuery>)
Bugs fixed:
- In UI Query Result, when double-clicking the divider between two column headers, the left-column width was not re-computed properly.
- In query/rule result windows, when showing a sub-result in a native window, when hovering a code element and showing its info in tooltip, if the mouse hovers the tooltip the sub-result native window used to fade away. Now it doesn't fade away anymore in such situation..
- In UI Search panel > Search by Coupling, the query result sub panel wasn't shown on mouse hovering.
- The Info tooltip is now hidden when a dialog is shown.
- The Info tooltip window was flickering a bit when code element hovered description was changing.
- In Query Explorer, when no group is selected, the Delete group button gets disabled.
- In Query Explorer, changing a group activation doesn't provoke anymore the group selection.
- The Query Edit TextBox didn't support special encoding characters, like cyrillic, chinese, japanese or arabic characters.
- In Visual Studio code editor, when right clicking a constructor (or class constructor) of a nested type, the NDepend code element was not resolved.
- Under certain circumstances, opening a source file declaration from NDepend from within a Visual Studio instance, could open this declaration within another Visual Studio instance.
- Opening a source file declaration from VisualNDepend.exe, provoke VS2010 to start (if installed) instead of starting the highest version of VisualStudio installed.
- In the source file declaration chooser form, when clicking the button Open Declaration, the first declaration was chosen, no matter the one actually selected!
- The default rule 'Constructor should not call a virtual methods' doesn't match anymore cases where "System.Object" virtual methods are called from the constructor, since such method can be called rom another reference than the this reference.
- Right click the application, or an assembly, or a namespace, the menu Select Types ... with highest depth of Inheritance, was not working well.
- Some memory leak have been fixed, especially concerning GDI objects that sometime provoked an OutOfMemoryException.
- In Query Result, when mouse hovers headers row, no code elements gets pointed.
- In Query Result, when mouse hovers no cell, no code elements gets pointed.
- In Query Result, if the horizontal scrollbar at the bottom is not visible, dataGridViews are resized and use this space to show more data.
- When a source file was referenced by several analyzed assemblies, the code coverage of the methods it contains could be erroneous.
- When NDepend hosted in Visual Studio, running an analysis and building report, and then the user close Visual Studio while the analysis was not finished, an exception could occur.
- Implementation of the rule 'Collection properties should be read only' could throw InvalidOperationException.
- The default rule 'Public methods returning a reference needs a contract to ensure that a non-null reference is returned' was broken. it is now fixed.
- When closing a NDepend session, under certain situation it was possible that the info tooltip minimized native window remained visible.
- When downloading NDepend zip through InternetExplorer, and unzipping the zip file with Windows zip, the NDepend .exe and .dll are marked by Windows as blocked. Now when starting NDepend.Console.exe, VisualNDepend.exe or NDepend.VisualStudioExtension.Installer.exe, Windows is prompting to unblock the file, and when answering yes the execution works fine.
- In the Baseline for comparison in the NDepend project properties, when clicking Current Project radio button while Another NDepend Project chosen was equals to current project, the Analysis to Compare With radio buttons were not enabled.
- When a NDepend analysis result file is corrupted (which is very rare, it can happen though when a process gets killed while writting the analysis result file), an exception error form appeared while the user tried to load it. Now an error message box is shown to the user explaining that she must re-analyze the project.
- When loading an analysis result, that contained types with same full name but declared in different assemblies, if some of these types contained some nested type, there were some outter-type resolution problems for these nested types at loading time.
- Some problem could happen when analyzing assemblies that use type forwading, without respecting the assembly name casing.
- In VS, the shortcut Ctrl+S to save changes in NDepend Project Properties didn't work.
- When an analysis took more than a minute, with analysis option Run In-process, once the analysis done, deactivating/reactivating the main window could result in reloading the already loaded analysis result.
- Variable generated by the C# compiler for object initialization were counted in the IMethod.NbVariables value.
Version 5.4.1.8430
Released on 15th of September 2014
Rules Enhancement:
- The default rule 'Types with too many methods' has been refined to avoid counting methods like constructor or property accessors.
- The default rules 'Disposable types with unmanaged resources should declare finalizer' and 'Types with disposable instance fields must be disposable' have been refined to handle the situation when several .NET Fx are referenced, and hence several System.IDisposable types can be available.
Bugs fixed:
- Double clicking a node on the graph now tries to open the node declaration in source code.
- When running in VS with Node.js tools for Visual Studio installed, some exception could be raised by NDepend.
- In VisualNDepend.exe when changing theme, all panels are de-selected to avoid UI refreshment issue.
- In VisualNDepend.exe when Query Edit panel was selected, selecting another docked panel like the Dashboard didn't provoke Query Edit panel edit tab unselection.
- Some misleading message could appear when a problem occured while attaching or detaching a NDepend project file to a Visual Studio solution file.
Version 5.4.0.8391
Released on 1st of August 2014
Main Feature:
- Support for TypeForwardedToAttribute. This way third-party code used by assemblies compiled with WinRT Profiles is now properly resolved.
NDepend.API Enhancement:
- Two new NDepend.CodeModel.IType get properties: IsTypeForwaded and TypeForwadedDeclAssemblyName.
- The NDepend.Query.ExtensionMethodsQuery class has 3 new extension method: TryGetQueryName() query.IsActiveAndAllParentGroupActive() group.IsActiveAndAllParentGroupActive()
- The NDepend.DotNet.VisualStudio.IVisualStudioManager interface has the new method TryGetNDependProjectFilePathAttachedToVisualStudioSolution()
Rules Enhancement:
- The rule "Exception class name should be suffixed with 'Exception'" now take account also of generic exception types.
- Informative comments added in rules:
- Don't use .NET 1.x HashTable and ArrayList
- Methods that could have a lower visibility
- Types that could have a lower visibility
- Fields that could have a lower visibility
Bugs fixed:
- In Query Explorer, when click to expand a parent node not selected yet, this resulted into an immediate collapse provoked by the node selection.
- In Query Explorer, when no group is selected, clicking the Delete Group button provoked an exception
- In the report, the Main > Summary of Rules violated > DataGridView Header contained an unnecessary empty line at the top.
- Using the method FromAssembly("") with an empty string as argument when editing a CQLinq query, could lead to a ContractException.
- When an assembly was compiled against WinRT assemblies, attribute tagging was not resolved well, for example the CLSCompliantAttribute was not seen as tagging the assembly.
- When an assembly was compiled against WinRT assemblies, IType.IsAttributeClass and IType.IsExceptionClass flags were not properly set!
- Using the NDepend.Console.exe command line switch /AnalysisResultToCompareWith didn't if the analyzed project didn't have a baseline for comparison set, to be used during analysis.
- When starting NDepend.Console.exe trial edition without having activated yet the evaluation period on the machine, a misleading message was shown. Now the user is guided to start trial by starting VisualNDepend.exe.
- NDepend can now extract assembly file path from VS project files using <OutDir> tag instead of <OutputPath> tag.
- An OutOfMemoryException could be thrown when loading an analysis result obtain from code compiled for .NET v4.5 or higher + Windows Store 8.
- When an assembly A was referencing another assembly B but was not using any of B's types, A was seen as using B when the analysis result was seen just after the analysis.
- URL to Reflector download page got updated both in Reflector Addin install and in embedded documentation.
- More information are provided in the bug log when an exception occurs while loading an analysis result.
Version 5.3.0.8360
Released on 17th of June 2014
- Trend charts exported to HTML+js and trend charts in the report were dated with one month difference, because javascript date months are zero-based while C# date months are 1-based.
- When trying to open the source-file decl of an auto-property getter or setter method, a not available reason is now shown with the proper description.
- When the mouse pointer was moving fast over the Dependency Graph elements, the info tooltip wasn't updated properly.
- When a temporary project was loaded, building a new temporary project (for example by clicking "Analyze a set of .NET assemblies") and running an analysis on it, resulted in the previous temporary project analyzed.
- In the Trend Chart Edit Form, when deleting a series row in the DataGridView through a Delete key press, the row was deleted but the series wasn't suppressed in the series TreeView and in the series Chart.
- On the StartPage, when left-clicking a project in the recent project list, if the row tooltip was visible and the left-click occured within the tooltip, the project was not loaded.
- The Code Query generated in the Search panel > Searching Fields by Coupling, was incorrect and didn't compile.
- When showing the form Analyze .NET assemblies in directory, when setting Recursive child folder on a hierarchy of folders where nested paths exceeded 260 chars, the exception PathTooLongException was thrown. Now, there is no more PathTooLongException but the assemblies with path too long are not shown in such situation.
- The two Power Tools g) "Code Review Methods Changed" and c) "Public API Changes" starts with a Compare dialog. When clicking cancel button on this Compare Dialog, instead of quiting the PowerTool, the dialog appeared again.
- The Power Tools that asked for a project through the a) b) c) choice, now handle properly when something else than these 3 letters is typed, and the ESC key can be used to quit the PowerTool.
- The Power Tool "Find potential Dead Code" doesn't return anymore types that contains only const literal types, that cannot be seen as used by NDepend.
- A new Power Tool named "Dated Log Trend Values" is now provided to show the various NDepend.API options to log programmatically trend metric values, at any past or future date.
Version 5.2.1.8320
Released on 26th of February 2014
Bug fixed:
- When modifying project properties, if the particular analysis result file to compare with couldn't be resolved, a NullReferenceException could be thrown.
- When loading an analysis result from a non-existing file, the error shown to the user is now more explicit.
- Concurrency issue resolved while loading analysis result in the UI.
Version 5.2.0.8280
Released on 29th of January 2014
- A new panel NDepend project Properties > Paths Referenced has been added to let the user manage project paths efficiently.
- Path referenced from the the NDepend project can now start with an environment variable (like %ENVVAR%\Dir\File.txt).
- Path referenced from the the NDepend project can now use the UNC absolute path syntax (like \\Server\Share\Dir\File.txt).
- Path referenced from the the NDepend project can now use a system of path variables (like $(NdProjectDir)\Dir\File.txt) and by default two variables are defined: $(NdProjectDir) and $(NdProjectOutputDir)
- NDepend.Console.exe can now accept through the command line switch /PathVariables, some path variables values to make project paths redirection easy.
- NDepend.Console.exe can now accept through the command line switch /TrendStoreDir, to specify the trend store directory.
- Historic Analysis Results can now be stored with a defined frequency (not more often than...), under the project output directory, but also under a custom directory.
- NDepend.Console.exe can now accept through the command line switch /HistoricAnalysisResultsDir, to specify the directory where historic analysis results are stored.
- NDepend.Console.exe can now accept through the command line switch /PersistHistoricAnalysisResult, to force persist historic analysis result once the analysis is done.
- In NDepend.Console.exe command line arguments, the option /KeepProjectInDirs can now be optionally used just after the option /InDirs to avoid ignoring the input directories specified in the project file.
- In NDepend.Console.exe command line arguments, the option /KeepProjectCoverageFiles can now be optionally used just after the option /CoverageFiles to avoid ignoring the coverage files specified in the project file.
- New Visibility code rule: Types that could be declared as private, nested in a parent type
- Enhanced rules : Fields should be declared as private
Ergonomy enhancements:
- Adoption of VS2013 Code Element Icons.
- In Project Properties panels, some '*' label have been added to show a detailed view of what project changes haven't been saved yet.
- In the NDepend project Properties panel > Code to Analyze tab > Directories, several directories can now be selected to be all deleted in a row.
- In the NDepend project Properties panel > Code to Analyze tab > Directories, when adding one or several new directories, the path mode (absolute/relative/envVar/variable) is kept for the added directories paths (if possible).
- In the NDepend project Properties panel > Code to Analyze tab > Directories, when a directory couldn't be resolved, on right click the menu 'Open the directory in Windows Explorer', a message box with explanation is now shown.
- In Project Properties panels, double clicking a textbox that shows a path, let's open Windows Explorer on the path.
- In Project Properties panels, when changing paths referenced by a baseline for comparison, if possible path mode (absolute/relative/envVar/variable) is kept.
- In Project Properties panels, when changing custom Trend Store Directory, if possible path mode (absolute/relative/envVar/variable) is kept for the new custom Trend Store Directory.
- In Project Properties panels, when adding new Coverage Files referenced by the project, if possible path mode (absolute/relative/envVar/variable) is kept for the added coverage files.
- In code query result panel, the row header and vertical grid appearance have been enhanced.
- In the main Report menu documentation, a sub-menu to open the Sample Report page on the website has been added.
- In the dashboard, the # of violations labels descriptions gets its X position adjusted to fit best depending on the width of the # of violations label.
- In the Analysis Error List panel, some descriptions of how paths are resolved and if they are overridden by command lines arguments, are now shown as info logs.
- When the user click the button "Project Properties > Analysis > Project File > Save As" and the project references one or several paths relative to the project file location, a warning dialog explaining the potential issue, is shown.
- When choosing a directory through the directory chooser with intellisense control, when the first character is a backslash '\', available network shared paths are displayed with the UNC path format.
- The NDepend User Voice page is now linked from the Start Page.
- Analysis result files now have a dedicated file name extension '.ndar' and their name is formatted this way: NDependAnalysisResult_ProjectName_Date.ndar!
Bug fixed:
- On project with many assemblies (like hundreds), in the NDepend project Properties panel > Code to Analyze tab > Third-Party assemblies, moving some third-party assemblies to application assemblies could take a lot of time.
- In the NDepend project Properties panel > Code to Analyze tab > Directories, when updating a directory on which the current Windows user don't have the authorizations, an UnauthorizedAccessException was raised.
- In the NDepend Error List panel, if many (like thousands) of analysis logs were shown, the grid took time (like seconds) to be filled or resized.
- When running NDepend.Console.exe, when redefining the output directory with the /OutDir command line argument, if the project's trend directory was set to its default value $(NdProjectDir)\TrendMetrics, the specified output directory value wasn't used to infer the trend directory.
- The OptimalVisibility was seen as private instead of protected, for a protected static method declared in a base class used by a type nested in a derived class.
- Code Coverage file form had some visual issues when being shown with DPI mode higher than 100%.
- When DPI was higher than 100%, in the Help panel, sections titles were not drawn properly.
- When DPI was higher than 100%, Project Properties > Report had some drawing issues.
- When DPI was higher than 100%, in VisualNDepend.exe closing an Analysis Result Session provoked a NullReferenceException.
Version 5.1.0.8180
Released on 28th of November 2013
- New link Help > NDepend User Voice
- When specifying a code element name in a CQLinq code query, the extension method FromAssembly(string assemblyName) can now be applied to filter only code elements matched from a particular assembly.
- NDepend.Console.exe can now accept coverage files paths (absolute or relative) as input. In such case, these paths override coverage files paths specified in the project to analyze.
Ergonomy enhancements:
- Executables icons now display nicely in taskbar with 200% DPI setting.
- When a code element cannot be resolved by name in a code query, the error is now completed with explanations about how to solve the mistmatch.
- When right-clicking a set of assemblies to analyze, in addition to the menu 'Remove selected assemblies' the menu 'Remove non-selected assemblies' has been added.
- In VisualStudio addin NDepend Windows, all NDepend panels have been added to make a convenient and intuitive access.
- If 2/3 of assemblies of a code base share a same version, this version is shown in the UI Dashboard and in the Report header summary.
- A new option NDepend > Options > NDepend Skin > Visual NDepend menu casing, is now available to set Visual NDepend menus casing.
- A new Define Baseline for Comparison dialog has been introduced to explain the difference between setting the baseline in the NDepend project, and setting the baseline temporary just for the current session.
- A new Import Coverage Data dialog has been introduced to explain the difference between referencing the coverage files imported from the NDepend project, and importing the code coverage file(s) into the currently loaded analysis result.
- When the user clicks a Run Analysis button located out of the Project Properties panel, and if the Project Properties panel contains some unsaved changes, a message box now proposes to the user to save changes and then run analysis, or to just cancel the run analysis operation.
Report enhancements and fixes:
- A new Trend Chart library is used with no offline restriction. Now Trend Charts can be visualized in the report, even if the machine is offline.
- When analyzing a project for the first time, trend charts in the report were not populated with trend data logged during this first analysis.
- In report code queries and rules bodies can be now expanded or collapsed. They are all expanded per default and a new Report option let them be all collapsed per default.
- In report, the 4 diagrams pictures (small version) didn't respected the original aspect ratio.
- The help about the thresholds settings provided in the report about empty sections Dependencies/Metric for Namespaces/Types, , wasn't clear enough.
- In Code Queries sections (i.e defined with groups with orange borders in Queries and rules explorer), the query header didn't show a warn or a warn-critical icon if the query was a rule violated (critical or not).
- In Code Queries section header, a rule violated link pointed to the rule in Rule Violated section instead of the rule in Code Queries section
- In Code Queries section representing the group 'Code Diff Summary', a quick description of the baseline for comparison is now shown at the beginning.
- The option 'Project Properties > Report > Allow breaking long code element names' was not taken account when it was set (and per default it is set).
- In Internet Explorer 11 on Windows 8.1, the CSS of the report wasn't taken account.
- In the report now have a valid Mark Of The Web (MOTW) header to make javascript execution supported when browsing the report with Internet Explorer.
- In the left menu, when some group of rules or queries names were too long without space (like "System.Runtime.InteropServices") a VScroll bar was shown in the corresponding menu.
- In the left menu, when a parent group contains some children groups that contain violated rules, the number of rules violated gets summed and a hierarchy icon indicates that the parent group contains some children groups.
- In the report green/yellow/red rules violated numbers, critical rules are now counted with the red color.
- Some pictures names casing were not respected in report code source, provoking issues in environment like teamCity. This includes "Idea.png", "FilterBlue.png" and "filter.png" that was missing.
- Warning and Info icons have been added in Analysis Log report section.
Bug fixed:
- If an analysis couldn't be completed properly (because of a file access for example), some menu like 'Run Analysis' or 'Close Project' were enabled instead of remaining disabled.
- Coverage metrics values (PercentageCoverage, NbLinesOfCodeCovered, NbLinesOfCodeNotCovered) could differ from one unit, depending if the current code base has been obtained just after an analysis or throught loading a persisted analysis result.
- The default Trend Metric code query '# Lines of Code Added since the Baseline' was throwing an InvalidOperationException if some assemblies PDB files were missing in the older analysis result.
- In the UI or Report Dashboard, coverage data were erroneous if some analyzed assemblies PDB files were missing. Now the Dashboard shows a detailed explanation.
- When resizing StartPage, StartPage buttons were not repainted properly and traces appeared.
- Zooming-in indefinitely on a Trend Chart on Dashboard or in the trend Chart edit form, lead to an OverflowException.
- On high DPI settings or when the main windows had small height at startup time, on loading the StartPage was shown vertical-scrolled at the bottom.
- In the 'Add .NET Assemblies in Folder' dialog, stressing the path combo box could result in the list of assemblies being added twice.
- If since the NDepend UI startup the Queries Explorer Panel was visible with a height of 0, saving a query edited provoked an exception.
- When showing the Start Page, the first project in the list of recent project was already selected.
- When showing the dialog 'Select a project', the first project in the list of recent project was already selected.
- When running with .NET Fx v2, when doing some click or selection into the main tooltip, very rarely an AccessViolationException could be thrown.
- The default rule "Avoid duplicating a type definition across assemblies" doesn't match anymore types generated by compiler.
- Clicking check buttons of the Analysis Error List panel could provoke a NullReferenceException when clicked while no analysis result or no project has been loaded yet.
- An exception could be thrown while accessing a coverage file currently in use by another process.
- When clicking the Go button from the Help panel, section Dependency Cycle, an exception was raised if no Analysis Result was loaded.
- In a UI session where the Dashboard panel hasen't been shown yet, importing the coverage data and then showing the Dashboard panel lead to duplicated data on the Dashboard.
- Running a program using NDepend.API while a debugger was attached to the process could lead to problems.
- In VS, attaching the currently opened project to the currently opened VS solution, lead to an exception if the project only was opened (ie. no analysis result for the project was loaded).
Version 5.0.0.8085
Released on 26th of September 2013
Bug Fixes
- In the report trend chart or in the exported trend chart, if there were a single trend metrics log, dots were invisible on chart unless when hovered by the mouse. Dots are now permanently visible.
- In the dialog Diff > Definer diff > Compare current analysis result with, clicking the button browse provoked an exception.
- An exception could pop up while loading a v4 project.
- A NullReferenceException could be thrown when using the panel Search.
Version 5.0.0.8041 RC
Released on 18th of September 2013
Major Features
- Support for Visual Studio 2013: NDepend v5.0 integrates into Visual Studio 2013, 2012, 2010 and 2008.
- New Dashboard Panel: NDepend v5.0 proposes a new Dashboard that shows at a glance the state of your code base.
- Trend Monitoring: NDepend v5.0 can monitor trend metrics and shows trend charts. Default trend metrics and trend charts are proposed and custom ones can be created.
- Churning Rules and Queries: NDepend v5.0 lets list Rules and Queries according to common criterion. Listing all Rules Violated is now a one click operation.
- Focusing on Recent Rules Violations: NDepend v5.0 proposes the option to filter only rules violations that occur on code elements added or refactored since a baseline.
- Redesigned report. The report now includes trend metrics charts. The design has been rethought and more information is shown, especially concerning diff.
UI Enhancements
- Main menus organization relifted both in VisualNDepend and in VisualStudio addin.
- VS2012/2013 Light/Dark/Blue themes supported.
- VS2012/2013 UI style for Project Properties Vertical Tab.
- VS2012/2013 UI style for tabs in Query Edition and Search panels.
- VS2012/2013 UI style for Splash Screen.
- VS2012/2013 UI style for Start Page.
- VS2013 Style Icons.
- Support for using Visual Studio 2013 as a source file compare tool.
- When showing a dependency graph too complex to be browsed, a note is shown that explain that it is recommended to export the graph to the dependency matrix, better suited to browse large structure.
- In forms dedicated to choose assemblies set to analyze, the capability to filter assemblies by name has been added and ergonomy has been enhanced.
- Alt+N keyboard shortcut in VisualStudio now selects the NDepend main menu.
- In Matrix/Graph/Metric view, the Context Sensitive Help is not located anymore in the way that it could overlap the element currently hovered.
- The .NET Reflector addin install form is now smarter and can find the Reflector.exe path, if .NET Reflector has been installed through a .MSI file.
- Pan is now the default grab mode of the Graph.
- New pan cursor in Graph, Treemap and Matrix.
- On Vista OS and above, NDepend now uses the modern Folder browser dialog.
- On Right-click menus, the double click action menu is now bold.
- When double-clicking a class to open its source file declarations, the class being declared in two source files, the second being a ".designer." file, NDepend jumps directly to the source declaration of the type without proposing to open one of the two declarations.
- In Search panel, search code elements by change, when changing the kind of code element searched, the currently checked button remain checked if it is not disabled.
- In the Rules explorer panel, when selecting a group that doesn't have direct rules/queries children, NDepend expands its children groups!
- When double-clicking the critical rules violated warning in the Error List panel, the list of Critical Rules Violated is shown.
- When open a project, without analysis result, shows in the error list the last analysis (if any) logs
- In Search panel, query generated are now executed asynchronously which leads to improved UI responsiveness when searching on large code base.
- In Search panel, search code elements by change now generates more sophisticated code queries that provide more details.
- In Search panel, search code elements by coupling now generates more sophisticated code queries that provide more details.
New Default Rules and Changes
- New rule in the group "Visibility": "Event handler methods should be declared private"
- New rule in the group "Purity - Immutability - Side-Effects": "Don't assign a field from many methods"
- New rule in the group "Purity - Immutability - Side-Effects": "Array fields should not be read only"
- New rule in the group "API Breaking Changes": "Avoid changing enumerations Flags status"
- "Types that could have a lower visibility" has been modified to take account of the fact that a type used by an interface that has the same visibility, cannot have its visibility decreased, else a compilation error occurs!
- The rule "Types that could have a lower visibility" has been modified to not match static types without methods (except the class constructor) with only literal or readonly static fields.
- The rule "Classes that are candidate to be turned into structures" has been modified to now avoid matching classes that implement one or several interfaces.
NDepend.API Additions and Changes
- New interfaces IReadOnlyCollection<T> IReadOnlyList<T> in the namespace NDepend.Helpers. They will be changed to .NET Fx 4 versions once NDepend will buid against .NET 4.
- New extension methods: ToReadOnlyWrappedCollection() ToReadOnlyClonedCollection() ToReadOnlyWrappedList() ToReadOnlyClonedList() in ExtensionMethodsEnumerable.
- Most collections returned by API methods are now cloned IReadOnlyList<T>.
- IQuery, IGroup, IGroupOfGroups and IController object in NDepend.CodeQuery namespace, are not thread-bounded anymore.
- New boolean get/set property IProjectBaseline.FocusOnRecentRulesViolations/
- ICodeNode<T> became ICodeNode, implemented by ICodeElement and ICodeBase, to get an easier access than ICodeNode<T> on ICompareContext operations.
- It is now possible to run several analysis simultaneously on several threads in the same AppDomain, through run analysis API in ExtensionMethodsProjectAnalysis.
Bug Fixes
- When NDepend was hosted in Visual Studio 2012, the Horizontal and Vertical scrollbars of the dependency matrix were not drawn properly.
- Drag & Dropping the directory "C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies" to the list of folders in the NDepend Project > Code to Analyze panel didn't work, and adding through the Browse button threw an exception.
- Opening an URL in the default browser on Windows 8 with Chrome set as default browser could lead to a System.ComponentModel.Win32Exception.
- Interfaces names in Info panel were prefixed with "abstract".
- When the first column of a query result was not typed with IMethod, IField, IMethod, IType, INamespace and IAssembly, a misleading error message was shown.
- When exporting the query result to HTML, XSL or XML from the "Queries and Rules Edit" panel, if the first column of the query result contained some code elements duplicated, in the exported document, it might happen that for some rows the first column value didn't match the other values of the row.
- When only two large assemblies (> 4MB each) were analyzed, when analyzing assemblies with the option "Run Analysis Concurrent", the number of LoC provided could vary from one analysis to another due to a concurrency bug now fixed.
- When comparing assemblies compiled by different versions of the compiler, the 'nop' IL operations could be changed and NDepend was reporting such method as CodeWasChanged, while it was not.
- In VisualNDepend.exe, the bar and panel layout was not persisted, if the project was closed and a new analysis result was loaded.
- In NDepend UI, when showing the graph but haven't shown yet the matrix, when righ-clicking a dependency and selecting "Open this dependency on Matrix (focus on sub-dependencies changed)", a crahs occured.
- When running a full analysis, dependency matrix commands were frozen.
- When taking a snapshot of the dependency matrix, the option 'Display only blue cells or all cells' was ignored.
- When exporting a set of code elements to the vertical header of the dependency matrix, if the code elements set contained some third-party assemblies, it might happened that in the vertical header some third-party code elements appeared before the applicatio code elements.
- A query prefixed with 'notmycode' was still considered as active even if one of its parent groups was disabled.
- When opening a project without any analysis result loaded, when hovering an assembly, its description wasn't displayed in the info panel.
- In Query Edit panel, when a query with long text (provoking VScrollBar visible) was displayed, but never focused, clicking in query edition header (just above the query edition textbox) provoked the VScrollBar to go to the bottom.
- When drag and dropping a query or a group in the Queries and Rules Explorer panel, provokes cancellation of the edition of concerned queries in the Query Edit panel.
- Before converting CQL code queries from a group in Queries Explorer, if some of these CQL queries are edited, the user is prompted to close their edition first. Doing so, avoid some queries synchronisation problems.
- A sub-part of the hierarchy of namespaces of an assembly could be flat, when it makes sense to make it hierarchical.
- When a public class had public derived classes, the optimal visibility flags of its methods (flags CouldBeInternal, CouldBeProtected, CouldBePrivate), might not be infered properly.
- When comparing builds from the older build perspective, when the metric view hasn't been shown yet in session, when right clicking a node in newer build, the menu 'View on metric view' wasn't disabled and clicking it lead to an exception.
- In Queries edition textBox, when the completion box is shown, pressing Tab now select the current item.
- In Queries execution result, when sorting rows by clicking a column header, row selected was not preserved.
- In Queries and Rules Explorer panel, when expanding or collapsing a group and then moving the mouse, a group hovered by the mouse could then be selected.
- In Search Panel, when dealing with very large code base, if the search code query generated took too long for execution, an exception was thrown instead of showing the query as time-out.
- From Project Properties > Code to Analyze > Third-Party assemblies DataGridView, right click menu on assembly 'Pin description in Info View' was not working.
- In NDepend Project Properties, when hovering an application or third-party assembly with the mouse, its description didn't appeared properly in the tooltip.
- The NDepend.API method ExtensionMethodsProjectAnalysis.GetAnalysisResultRefToCompareWith() could return null if no analysis result representing the baseline can be found. This method had a wrong contract avoiding to return null. To avoid any confusion, this method has been renamed TryGetAnalysisResultRefToCompareWith() and now returns a bool, and the analysis result reference as a out parameter.
- When a property name started with "Item", the getter and setter of the property didn't have the flag IsPropertyGetter or IsPropertySetter set.
- In Metric View, when double clicking outside of the treemap rectangle, a MessageBox was shown.
- In Metric View, when double clicking near to top or bottom or treemap rectangle, the selected code element was inaccurate.
- In Metric view, pan was possible on right mouse button, and consecutive right mouse click were provoking treemap translations.
- In Metric view, when using the feature 'selecting top XXX' in configuration Fields/# Fields, Methods/# Methods, Types/# Types, Namespaces/# Namespaces, a non-compiling CQLinq query was generated.
- In Matrix view, when double-clicking a cell to dig inside the dependency through the matrix, the transition animation interpolate between the previous/previous states instead of the previous/next states!
- When creating a new temporary project with a name similar to a previous temporary project, previous session context persisted state could interfere with the new temporary project session context state.
- In VisualStudio solution explorer panel, when right-clicking some folders to generate a code query, sometime the underlying namespace could not be found and the anonymous namespace was chosen instead.
- In VisualStudio solution explorer panel, when right-clicking a project, some NDepend menus might not be well ordered.
- In Visual Studio, when a solution (with no NDepend project attached) was loaded, and a NDepend analysis was running, when hovering the progress circle with the mouse, the progressing control was not shown.
- In very rare occurence, Visual Studio crashed at startup because of a NDepend exception.
- In the situation of editing a query with the completion box and eventually the documentation box visible, when switching to another panel through a keyboard shortcut, the completion box wasn't hidden.
- When loading an Analysis Result with code element previously selected, click the button select Back (code element) and then the button Forward raised an exception.
- In report opened on chrome, the left menu unfolded were shown under the grid view in the results.
- When the .NET Reflector addin install form was shown from a right-click menu, the dialog wasn't modal.
- When the NDepend install dir contains an ampersand '&' character, the NDepend Visual Studio addin couldn't be properly installed.
- When NDepend was installed in a directory with a sharp character '#' in the path, full analysis was unable to locate assemblies to analyze.
- When adding a coverage file to a project through the NDepend.API method IProjectCoverage.AddCoverageFile(), its CoverageFileMergeMode was CoverageFileMergeMode.None instead of the default value CoverageFileMergeMode.Or.
- When two processes (VisualNDepend or VisualStudio) were showing the same NDepend project, changing something in the project in one process lead to ask the user to reload the project in the other process when its Windows was reactivated. In case the other process shows a modal dialog, we don't ask the user anymore to reload the project because this could lead to buggy situations.
Version 4.1.0.6871
Released on 12th of December 2012
Features
- Supports for WinRT (Windows Store) applications and .winmd files.
- Introduce the notion of .NET Profiles (.NET Fx, Silverlight, WinRT...) concerning directories of a NDepend project, containing .NET framework assemblies.
- The right .NET Profile of a new NDepend project is now inferred automatically from application assemblies references.
- Introduce the new enumeration NDepend.DotNet.DotNetProfile, that replaces NDepend.DotNet.DotNetFrameworkVersion.
- The interface NDepend.DotNet.IDotNetManager has been enhanced to take account of .NET Profiles.
- More VS2012 look and fell.
Bug Fixes
- When NDepend was hosted in Visual Studio 2012, the Horizontal and Vertical scrollbars of the dependency matrix were not drawn properly.
- A bug has been fixed in Mono.cecil, that made NDepend analysis crashes on some special assemblies.
- When analyzing thousands of assemblies, an exception could popup because the analysis log relating assemblies resolving could be too large.
- In the Queries Explorer panel, the queries DataGridView horizontal scroll bar, was shown even if it was not needed.
- With high DPI Windows parameters, in the search panel, the query generated textbox size didn't have maximum width.
Version 4.0.2.6750
Released on 11th of July 2012
Default Code Rules set
- New Code Rule: Collection properties should be read only
- New Code Rule: Avoid publicly visible constant fields
- Rules 'Potentially dead Types', 'Wrong usage of IsNotDeadCodeAttribute', 'Types that could have a lower visibility' and 'Wrong usage of CannotDecreaseVisibilityAttribute' have been adapted to avoid matching static types that have only literal (const) fields. Indeed, these types cannot be seen as used in IL code.
- Take account of types and methods tagged with 'System.Diagnostics.DebuggerNonUserCodeAttribute' to define the set JustMyCode in default queries: 'Discard generated Types from JustMyCode' and 'Discard generated and designer Methods from JustMyCode'.
Bug Fixes
- In VS 2012, 2010 context, when opening the panel 'Queries and Rules Explorer' from the main menu, and then docking it in another panel, the panel didn't maximize its size.
- The methods from NDepend.CodeModel.ExtensionMethodsHelpers, To[Simple/Full]NameLikePredicate() don't require anymore the input contract that regexString must be not empty. In Certain situations this provoked exceptions.
- For a IType object that is a third-party interface, the types returned by IType.TypesThatImplementMe didn't contain third-party types that implement the interface.
- In Report, the algorithm used to sort a numeric column was a textual sorting algorithm instead of a numeric sorting algorithm.
- Hitting Ctrl-Space after a word at the start of a line just below a mono-line comment that ends up with a dot, could provoke an exception.
- Right clicking a parent code element (type, namespace...) with a lot of direct child, now can tell instantly if there is a dependency cycle between the direct child of the code elements.
- When installing the Reflector add-in through a code element right click -> Reflector menu, the Reflector add-in installation wasn't persisted when closing the process.
- In VisualStudio NDepend addin light installation, when installing the Reflector add-in through a code element right click -> Reflector menu, clicking the browse file button provoked an exception.
- When starting Reflector from NDepend, if the Reflector window was closed immediately after popup, a RemotingException occured on the NDepend side.
- Very rarely, a NullReferenceException was thrown while the user was editing a code query.
- Very rarely, for some obfuscated assembly a NullReferenceException could popup at analysis time.
- Very rarely, while running a full analysis in the VisualNDepend process, a ThreadAbortException could popup.
- Very rarely, a CannotUnloadAppDomainException could popup after loading a project.
- Very rarely, a NullReferenceException could popup when opening a sub-result (in a row), in a CQLinq query result.
Version 4.0.1.6475
Released on 30th of May 2012
Bug Fixes
- Methods UsingAny() IndirectlyUsingAny() UsedByAny() IndirectlyUsedByAny() defined in ExtensionMethodsSequenceUsage class didn't return any input code element, in the output sequence of code element, even for input code elements matching the usage condition.
- On machine without .NET Fx v3.5 SP1 installed, a MissingMethodException could be thrown because of the usage of the method System.Threading.WaitHandle.WaitOne(Int32), that has been added to .NET Fx v3.5 SP1 release!
Version 4.0.0.6345
Released on 23th of May 2012
Features
- CQLinq: Code Querying and Rule over LINQ
- NDepend.API and open-source Power Tools implemented on top of NDepend.API
- Possibility to define the code base view JustMyCode through CQLinq queries prefixed with "notmycode", to exclude generated and unwanted code elements from CQLinq rules and queries result.
- Possibility to compare evolution, trending (Avoid making complex methods even more complex)
- Possibility to create custom code metrics.
- Advanced code completion and documentation browsing for CQLinq queries edition.
- Time out available for CQLinq queries and Query execution duration displayed
- Query conversion from CQL query to CQLinq query. Available in Queries panel edition, Queries and Rules Explorer panel, as a Power Tool, and as an NDepend API extension method: string ConvertToCQLinq(this IQueryCompiledSuccess queryCompiledSuccess)
- Possibility to visualize sub-query result, made of a collection of code elements for each query match.
- NDepend integration within Visual Studio 2012
- Support for .NET v4.5 and Silverlight v5.0.
- Project and Analysis Result files referenced from baseline for comparison, can now be defined through relative or absolute paths.
- NDepend.Console.exe file path and directory path arguments can now be relative to the parent directory path of the NDepend project file specified as a first argument. The NDepend project file path cannot be a relative path.
- Mouse hovering in various panel is now less reactive. Toolips only appears when the user position the mouse over a hot spot, and flashy tooltips on mouse move are discarded.
- Facility to reset the dependency graph and matrix with assemblies, namespaces and namespaces dependency cycles.
- Support to plug the Visual Studio 2012 Diff tool to NDepend.
New Power Tools
- Query Code with CQLinq
- Detect Assemblies Versioning and Deployment Issues
- Public API Changes (including API Breaking Changes)
- Search for Duplicate Code
- Find potential Dead Code
- Code Base Evolution
- Code Review Methods Changed
- Search Types by Name
- AppWords
- Analyze Code on my Disk
- Analyze Assemblies in Folder
- Analyze all .NET Framework Assemblies
- Convert CQL queries/rules of a project to CQLinq queries/rules
- .NET Framework v3.5 and v4.X installed, Core Public API Changes
New Default Code Rules
- Base class should not use derivatives
- Do not hide base class methods
- Types with disposable instance fields must be disposable
- Disposable types with unmanaged resources should declare finalizer
- Extension methods should not be used to extend System.Object
- Overrides of Method() should call base.Method()
- Methods should be declared static if possible
- Non-static classes should be instantiated
- Constructor should not call a virtual methods
- Don't assign static fields from instance methods
- Avoid types initialization cycles
- Avoid interfaces with too many methods and property getter
- Avoid the Singleton pattern
- Avoid custom delegates
- Avoid namespaces mutually dependent
- Avoid namespaces dependency cycles
- Avoid partitioning the code base through many small library Assemblies
- Avoid public methods not publicly visible
- Constructors of abstract classes should be declared as protected or private
- Equals() should be overridden by types implementing the '==' operator
- UI layer shouldn't use directly DB types
- UI layer shouldn't use directly DAL layer
- Avoid public methods not publicly visible
- Methods that could have a lower visibility
- Broken serializable types
- Heuristic to find types moved from one namespace or assembly to another
- C.R.A.P method code metric
- Avoid decreasing code coverage by tests of types
- Types that used to be 100% covered but not anymore
- Avoid making complex methods even more complex
- Avoid making large methods even larger
- Avoid transforming immutable types into mutable types
- Avoid adding methods to a type that already had many methods
- Avoid adding instance fields to a type that already had many instance fields
- Avoid transforming an immutable type into a mutable one
- Avoid transforming an immutable field into a mutable one
- Types tagged with ImmutableAttribute must be immutable
- Avoid static fields with a mutable field type
- A field must not be assigned from outside its parent hierarchy types
- Don't use obsolete types, methods or fields
- Don't use dangerous threading methods
- Don't tag instance fields with ThreadStaticAttribute
- Don't forget to implement methods that throw NotImplementedException
- Don't call your method Dispose
- Methods prefixed with 'Try' should return a boolean
- Avoid having different types with same name
- Avoid prefixing type name with parent namespace name
- Avoid naming types and namespaces with the same identifier
- Public methods returning a reference needs a contract to ensure that a non-null reference is returned
- Test Methods
- Methods directly called by test Methods
- Methods directly and indirectly called by test Methods
- Types directly using one or several types changed
- Types indirectly using one or several types changed
- Methods directly calling one or several methods changed
- Methods indirectly calling one or several methods changed
- Higher cohesion - lower coupling
- Avoid referencing source file out of Visual Studio project directory
- Avoid duplicating a type definition across assemblies
- Namespace name should correspond to file location
- Avoid defining multiple types in a source file
- Types with source files stored in the same directory, should be declared in the same namespace
- Types declared in the same namespace, should have their source files stored in the same directory
Enhanced Default Code Rules
- Types with too many methods
- Types with too many fields
- Type should not have too many responsibilities
- A stateless class or structure might be turned into a static type
- Class shouldn't be too deep in inheritance tree
- All Code Diff Summary queries are
- API Breaking Changes: Methods
- API Breaking Changes: Types
- API Breaking Changes: Fields
- API Breaking Changes: Interfaces
- Potentially dead Types
- Potentially dead Methods
- Potentially dead Fields
- Types tagged with ImmutableAttribute must be immutable
- Methods tagged with PureAttribute must be pure
- Property Getters should be immutable
- Avoid methods with name too long
- Avoid types with name too long
- Avoid fields with name too long
- Interface name should begin with a 'I'
- All 30 .NET Framework Usage rules
Bug Fixes
- All NDepend assemblies are now compiled in AnyCPU. This solves all incompatibility problem with Reflector and VisualStudio on machines with a x64 processor architecture.
- Right-clicking an assembly in 'Project Properties > Code to Analyze' or in form 'Analyze a set of .NET Assemblies' didn't provoked the row selection.
- Tooltips are not flickering anymore.
- From the menu Compare 2 versions of a code base, if the newer version was a set of assemblies and a report was generated, the report only displayed the newer version of the code base. It wasn't compared with the older version of the code base.
- In the tree view showing code queries group, even with the vertical scrollbar down, the last item wasn't shown properly.
- Types generated by the compiler, from an iterator method implemented as an explicit interface implementation method, were not seen as IsGeneratedByCompiler.
- Some rare obfuscated assembly could provoke a NullReferenceException at analysis time.
- Some memory leaks have been fixed.
Version 3.9.0.5848
Released on 17th of October 2011
Features
- Possibility to append to the code set to analyze, all .NET assemblies in a folder in a row (shallow or recursive).
- In the CQL Queries Explorer panel, new context menu possibility to paste any default group.
- Methods with too many overloads (NbOverloads) now doesn't match operator methods
- In NDepend project .ndproj file, code queries are now persisted in a friendly way for text edition, through some CDATA XML elements.
Bug Fixes
- VS2010 crashes at shutdown when hosting NDepend (or another addin) appears to be a VS2010 bug solved by the VS2010 fix KB2275326: http://archive.msdn.microsoft.com/KB2275326
- When VS2010 was hosting the NDepend addin on a machine with a DPI different than the default 96, hovering the mouse on progress circle didn't work properly.
- When installing or desinstalling a VS2010 extension, a NullReferenceException might popup provoked by the VS2010 NDepend Addin.
- If the font Arial Narrow wasn't installed on the machine, an exception could pops up when starting VisualStudio with NDepend addin.
- Some PDB files tagged with SRCSRV by the build server were seen as corrupted.
- On some VS coverage .coveragexml files, it might appears that some methods were not seen as having coverage data.
- In the dialog Choose VS solutions or projects, when double-clicking a DataGridView column header an exception was raised.
- In VisualNDepend.exe standalone UI, hovering with the mouse the right side of the progress circle icon in the bottom righ of the window, could provoke the associated panel to disappear.
- The query edition option Copy query to HTML might not transform correctly '$' character into "&".
- The metric NbVariables defined on method now doesn't take account of compiler generated variables anymore.
- Usage of methodof() and fieldof() operators is now taken account at analysis time to resolve dependencies.
- The case where an analysis result loaded has been done by a higher version of NDepend than the current NDepend version, was not properly indicated to the user.
- NDepend addin for Reflector v7 doesn't work by-design on a x64 machine. Basically NDepend has to be compiled x86 because of its VS integration, and on 64bits Reflector cannot load x86 assemblies. But one can open a Visual Studio command prompt and execute corflags /32bit+ /force C:\Users\username\XYZ\Reflector.exe to make this work (make sure to replace the path to the file Reflector.exe).
- Selecting a type from NDepend to Reflector, when the Reflector process didn't exist yet, was buggy since Reflector 7.3.
- Decompiling a type from NDepend with Reflector was buggy since Reflector 7.3.
- Opening a dependency, from a dependency graph arrow to the dependency matrix, could result in an ArgumentOutOfRange exception if one of the 2 code elements involved was a type forward only assembly such as .NET 4.5 System.Runtime.dll
- The analysis was crashing if the current analysis result was compared with an older analysis result, for which no assembly were found.
- In Trial edition, in VisualNDepend.exe context, in the Dialog explaining the Trial edition usage that is shown when loading the project for the first time, when clicking the Exit button a NullReferenceException could be send.
- In Trial edition, the fact that it is not possible to running NDepend.Console.exe Trial in a Windows services process, is now more clearly explained to the user.
- After a large refactoring involving several types moving across namespaces, incremental analysis could throw a KeyNotFoundException or a NullReferenceExeption.
Version 3.8.1.5706
Released on 31th of May 2011
Ergonomy and Responsiveness
- NDepend addin loads 40% faster in Visual Studio (any version) at startup time.
- From the VS Solutions chooser form, when choosing VS solutions with hundreds of assemblies to analyze, the time to fill the next dialog with .NET assemblies provoked an UI responsivness issue.
- In NDepend Visual Studio addin, limit the number of NDepend projects listed in the NDepend global menu to 30.
- In the Info Panel > Global Summary, an analysis result description now shows the NDepend version that produced the analysis result.
- In the dependency graph, if the user removed some nodes and then click a graph laying out button (Horizontally or Vertically), it now reformats the graph layout only with nodes not removed.
Bug Fixes
- When a new VS solution is created, the NDepend menus to attach a new NDepend project to the freshly created solution are now available.
- When attaching a new NDepend project to a VS solution, if the NDepend project file wasn't in the same directory than the VS solution file, this situation could lead to problem.
Version 3.8.0.5674
Released on 12th of May 2011
New Features
- New menu in Start Page 'Select VS Solution(s) to Analyze'
- Ergonomy of 'New NDepend Project' dialog enhanced.
- In Build Comparison Setting form, there is a new button 'Browse VS solutions' to fill easily the assemblies list.
- On multi-monitor machines, all NDepend dialogs and forms shown, now appear on the screen that currently contains the mouse cursor
- The Dependency Matrix and Graph now support the mouse extra-buttons back/forward.
- Support for Reflector v7.X
- The default rule 'Fields should be marked as ReadOnly when possible' now discards fields generated for events (i.e fields where 'IsEventDelegateObject').
- The flag Concurrent is now implemented by the MSBuild and NAnt tasks.
- In CQL Explorer panel, it is now possible to export a group of queries to XML.
Bug Fixes
- Regression bug: Importing coverage file live in NDepend interactive UI was not working.
- Regression bug: Loading or re-loading NDepend addin in VS while VS was already running, provoked an exception.
- Some rare obfuscated assemblies could provoke an exception at analysis time.
- Attempt to create a new project with a file path equals to 'D:\' could lead to an exception.
- When re-loading a former analysis made on some C++/CLI assemblies depedending on stdLib, an exception could occur.
- When at analysis time no application assembly was found, an exception occured while building the Dependency Matrix for report.
- On some very large code bases, analysis could hang because of some problem in Type and Method ranking computation.
- On the Start Page with high DPI set, some UI elements could not be displayed properly.
- Trying to infer .NET assemblies from a solution involving a Web Service could lead to an exception.
- When parsing C# source file, an erroneous warning concerning an enum that would be declared wrong was emitted if some variable name were like 'enum1' or 'enum2'.
- In C#, two consecutive generic clauses 'where' could provoke an erroneous warning from the NDepend C# source file parser.
- A FieldAccessException could occur at analysis time if other VS addins relying on Mono.Cecil were loaded.
Version 3.7.0.5526
Released on 16th of March 2011
Support for importing coverage data from DotCover v1.1 and above versions.
Bug Fixes
- When started VisualNDepend directly on a .ndproj file, an exception occured.
- When right clicking the start page DataGridView of projects, an exception occured if no project was listed.
- When ticking/unticking the check box 'Is critical rule' while editing a CQL query, the button 'Save query' enabling state wasn't updated.
- NCover coverage file with extension .nccov needed to be renamed with a .xml extension to be taken account.
Version 3.6.0.5432
Released on 17th of December 2010
Analysis Performance and Features
- Analysis execution performance increased up to 40%.
- New analysis run option: serial vs. concurrent, where concurrent mode can run a large portion of the analysis (full and incremental) concurrently.
- Up to 30% less memory consumed at analysis time.
- New NDepend.Console.exe command line option: /Concurrent
- Possibility to disable NDepend keyboard shortcuts when hosted Visual Studio (useful if there are collision with other tools).
Bug Fixes
- In the panel Project Properties > Code to Analyze, when drag-and-dropping many folders or many assemblies, the UI could take time to refresh and response.
- In VisualNDepend.exe with Ribbon mode, when editing a project that doesn't have previous analysis yet, clicking the button 'Load Previous Analysis' resulted in an exception.
- When opening an analysis with more than 250 assemblies for the first time, the dependency graph and dependency matrix shows only the first 250 assemblies, to avoid an arbitrary and uncontrolled computation duration.
- Some problem could appears in dependencies involving code elements declared in a multi-modules assembly.
- .NET assemblies generated from dump file can now be analyzed by NDepend.
- Some C++\CLI generated PDB files were not analyzed properly, they are now.
- The property IsCriticalRule wasn't taken account in CQL rules defined in code through the attribute NDepend.CQL.CQLConstraint.
- If the Windows user running the analysis didn't have access to the output directory of a NDepend project, an UnauthorizedAccessException popped up. Now a clean explanatory message is shown.
- When changing something to the CQL queries of a project, when switching to another window and coming back to the NDepend window just after the change, NDepend asked unexpectidly for reloading the CQL queries.
- A bug in incremental analysis where a third-party interface of a type was discarded wrongly, has been fixed.
- When clicking 'Run Analysis' from a project in the start page, if the NDepend project had a Baseline for comparison (UI) defined, this baseline wasn't loaded in the interactive UI once the new analysis result (produced by the triggered analysis) was reloaded
- When clicking 'Run Analysis' from a project edited without any analysis result currently loaded, if the NDepend project had a Baseline for comparison (UI) defined, this baseline wasn't loaded in the interactive UI once the new analysis result (produced by the triggered analysis) was reloaded.
Version 3.5.0.5374
Released on 24th of November 2010
Enhanced report
- New interactive javascript/HTML report design.
- New sections in report: Namespace Metrics and Namespace Dependencies
- New metrics at application levels available in the report.
- Possibility to visualize a Dependency Matrix in report.
- Percentage code coverage metrics available in report at application/assembly/namespace/type level.
- Possibility to display Groups of CQL Queries in Report
- Possibility to allow breaking long code elements names in report CQL list of matches.
A CQL rule can be qualified as critical rule
- Possibility to define some CQL rules as critical, and break the Build Process if some critical rules are violated.
- New default CQL rules:
- Methods too complex - critical (ILCyclomaticComplexity)
- Methods with too many parameters - critical (NbParameters)
- Types too big - critical (NbLinesOfCode)
- Avoid interfaces with too many methods
- Two default rules becomes critical:
- API Breaking Changes: Types
- API Breaking Changes: Interfaces
Bug Fixes
- When clicking 'Run Full Analysis and Build report', if the NDepend project had a Baseline for comparison (UI) defined, this baseline wasn't loaded in the interactive UI once the new analysis result (produced by the triggered analysis) was reloaded.
- Under certain condition, check boxes of Project Properties > Report DataGridView section were not visible.
- When the user unzipped NDepend files to a flat list of files instead of a sub-folder hierarchy, the wrong-install-message shown to the user was unclear.
- Trying to export a CQL query result that matched anonymous namespace could result in an ArgumentOutOfRangeException.
- Analysis log warnings disabled were still shown in the Analysis Log section of report.
- An ArgumentOutOfRangeException could be reported during analysis while parsing some C# source file using \n as line feed.
Version 3.2.0.5097
Released on 11th of October 2010
- Context-Sensitive Help added to panels : Matrix, Graph, Treemap.
- In the panel Project properties > Code to Analyze, when hovering a .NET assembly with the mouse, the info panel or tooltip provides a description of the assembly.
- In the panel Project properties > Code to Analyze, if NDepend shows an error for an assembly, the info panel or tooltip provides a plain english description of the problem.
- In the CQL Query editor, possibility to copy the CQL query to HTML formatting.
- Replace the term 'tier' (like tier code) with the term 'third party' (like third party code).
Bug Fixes
- New VS 2010 coverage result file with extension .coveragexml are now supported by NDepend.
- NDepend wasn't taking account the new VS 2010 code coverage feature to discard methods tagged with System.Diagnostics.DebuggerNonUserCodeAttribute, System.Diagnostics.DebuggerHiddenAttribute, System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute (or declared in type tagged with this attribute).
- NDepend wasn't taking account the NCover feature to discard methods tagged with System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute (or declared in type tagged with this attribute).
- When NDepend was using NCover v3 to gather coverage data, and some classes declared in anonymous namespaces were involved, some discrepancies might appear in coverage metric values.
- The window NDepend UI usage recommendation that appears once finishing an analyze triggered from UI is now bring to front of the browser window that appears to host the report.
- When closing VisualStudio with Alt+F4, while pointing with the mouse a NDepend panel, could result in a crash of VS or in NDepend's tooltip remaining visible longer than needed.
- On Windows XP, when showing Info tooltip or Circle tooltip, some flickering occured on the top left coordinate of the main screen.
- If an assembly PDB was found and parsed, but corresponding source files couldn't be parsed by NDepend, some code elements descriptions could show 0 value for source file information (like comments) instead of N/A.
- When showing the Rebasing Form from the Class Browser top application node, if the info tooltip was visible, it remained visible while showing the form for rebasing.
- When closing Visual Studio with NDepend addin installed, VS could crash in rare occasions.
- When starting NDepend with a dependency matrix with the option bound headers and displays index, index cells in the horizontal headers might no displayed right code elements.
- Some NDepend UI elements were not properly sized on machines with a DPI mode higher than 96.
- On machine with Windows configured to Japanese or other asiatic cultures, some NDepend forms could not be well sized.
Version 3.1.0.5016
Released on 3rd of September 2010
New Reporting Options:
- Possibility to hide third-party assemblies in the report assemblies dependencies graph.
- Possibility to choose layer direction in the report assemblies dependencies graph.
- Possibility to avoid too big reports by hiding section Type Metrics if more than 1000 types involved.
- Possibility to avoid too big reports by hiding section Type Dependencies if more than 300 types involved.
- Possibility to avoid too big reports by avoiding showing more than 100 matched items per CQL rule violated.
Usability Enhancement:
- A new dialog that helps NDepend beginners about what to do after an analysis has been added.
- If no Visual Studio addin is installed, a small animation on the NDepend Start Page explains to the user that the Visual Studio addin should be installed.
- In NDepend properties > Code to Analyze, the horizontal splitter between folders and assemblies has been made more obvious.
- If an Error form popups and a newer NDepend version is available for download, the Error Form fosters the user to download the most recent version that hopefully fixes bug.
CQL Default Rules:
- The rule 'Fields should be marked as ReadOnly when possible' does not match anymore fields generated by compiler.
- New default CQL rule in Design: Avoid partitioning the code base through too many Assemblies
- Two new default CQL rules in Purity / Immutability / Side-Effects: Instance Property Getter should be immutable ; Static Property Getter should be immutable
Bug Fixes
- In rare case, when a field type was a value type and a member of the field was accessed in a method, the field was incorrectly seen as written by the method and the method had one of the flag ChangesobjectState or ChangesTypeState .
- On japanese VisualStudio, an ArgumentException could be thrown when starting VisualStudio with the NDepend addin installed.
- Opening Source File declaration with Visual Studio could not work under certain rare circumstances.
- When choosing to represent folders with path relatives to NDepend project file, an eventual ASP.NET MVC assemblies path remains as an absolute path.
- When adding a .NET Framework folder to the list of folders of a NDepend project file, if the paths were represented as relatives, the .NET Framework folder path was transformed as relative instead of remaining absolute.
- A crash might occur at analysis time in the very rare case where an enumeration value__ instance field was declared as private (C++\CLI behavior).
- When 2 parent namespaces (namespace with name ending with .*) were dependent on each other, trying to see internal dependency could lead to an exception.
- Very rarely, a NullReferenceException was raised when clicking a header of the dependency matrix.
- NDepend Reflector addin provoked some unhandled exception in Reflector v6.5 because of new .NET v4 runtime behavior.
- NDepend was not able to disassemble code through Reflector v6.5.
- The form Baseline for Comparison Settings wasn't rendered well on machine with DPI set to higher than 96.
- In trial edition, when activating a VisualNDepend window or a VS hosting NDepend window, if the NDepend project contained a Baseline for Comparison + the NDepend project had to be reloaded on window activation, the message box explaining that the Baseline for Comparison was N/A in trial was popping again and again.
- When starting Visual Studio (any version) with the NDepend addin registered, rarely a NullReferenceException could popup because of a potential race condition that is now fixed.
- When starting Visual Studio (any version) with the NDepend addin registered, rarely a VisualStudio bug prevented to register properly the NDepend menu. Now the addin initialization is discarded and an informative message appears in the VS statuBar telling to reload the addin or restart VS.
- When downloading NDepend zip file redistributable + unzipping files with Windows Explorer zip, NDepend files are all marked as blocked. Now NDepend unblocks all its files automatically the first time an NDepend executable file is started.
- Very rarely, clicking the button 'Select Forward Code Element' could lead to a NullReferenceException.
- Very rarely, clicking a column header in a CQL result could lead to an IndexOutOfRangeException exception.
- Very rarely, showing the Search Panel could lead to an ArgumentException.
- Very rarely, browsing project through the open file dialog could end up in an exception if the open file dialog was returning a path not well formatted.
- Very rarely, browsing a VS solution file with open file dialog could end up in an exception if the open file dialog was returning a path not well formatted.
- Very rarely, solution attachment of an NDepend project could fail.
Version 3.0.3.4916
Released on 19th of May 2010
New features
- Support for Silverlight 4.0 applications
- New 'NDepend WebSite' button in Visual Studio NDepend menu.
- The default rule 'Classes that are candidate to be turned into Structures' has been modified to avoid matching classes without instance fields.
- The default rule 'Assemblies with poor cohesion (RelationalCohesion)' has been modified to require the assembly to have at least 20 types.
Bug Fixes
- SizeOfInst metric value could be wrong for types with instance fields that were pointers.
- When a cycle existed between several structures referencing themselves through fields that were pointers, the analysis crashed.
- If a type T had a method that was catching an exception type E, the dependency T is directly using E is now enforced (the dependency was not created in previous version if T wasn't using any member of E).
- The mandatory condition to make the list of NDepend.Console.exe argument began with the NDepend project file path, wasn't enforced in some situation.
- When a full analysis couldn't write the analysis result VisualNDepend.bin file, an exception was thrown. Now an informative error log is shown to the user.
- If a file path was malformed in VS project file, an exception could be sent at analysis time.
- Very rarely, an UnauthorizedAccessException could be sent when opening an NDepend project.
- When loading a NDepend project, if the project file got damaged or deleted before the end of the loading, an exception could be raised.
- Browsing a folder from NDepend might return an invalid folder absolute path, which would lead to an exception thrown. Now NDepend informs the user properly that it can't handle the invalid path.
- In Visual Studio, when a full analysis was executed, and the NDepend addin was unloaded (or VS was closed during the analysis), and the analysis failed unexpectedly, then the Visual Studio UI was frozen.
- When rebuilding a solution in VS, if a project build failed, NDepend analysis was triggered anyway. Now NDepend analysis is triggered only if all projects successfully build.
- NDepend now reports properly this problem: when a VS sln file has a ndproj file attached, the ndproj file path is stored relatively to the sln file path. If the file organization is changed by the user, it might happen that the ndproj absolute path cannot be retrieved from the relative path stored in the sln file.
- In VisualNDepend Trial, When shutdown VisualNDepend because having clicked the 'Exit VisualNDepend' button on the Trial Form, an ObjectDisposedException could be thrown.
- VS 2010 was crashing when loading the NDepend addin while a VS solution with a NDepend project attached was already loaded.
- A NullReferenceException was thrown whan starting VS with NDepend addin in light integration mode.
- When showing a CQL result with elements sorted hierarchically by source file declarations, if the application snapshot was currently rebased, the source files rebasing didn't occurs in the CQL result.
- When closing several VS instances with NDepend addin in a row, an IOException could be thrown because of concurrent writes of the VisualNDependOptions.xml file.
- When NDepend v3 and ReSharper v5 were installed, right-clicking in the ReSharper template editor provoked a NDepend exception to be raised.
- When a large Dependency Matrix was background computed, resizing the Matrix panel could provoke an exception.
- When a new graph was generated from a right-click option on a node of the current graph, the info tooltip wasn't discarded during background computation.
- Very rarely, NDepend professional might freeze slightly periodically.
Version 3.0.2.4770
Released on 15th of April 2010
Bug Fixes
- When installing NDepend addin for VS 2010 on Window 7 + NDepend zip file downloaded with IE + unzipped with Window zip, the NDepend.Addin.dll file was blocked and this prevented the addin to load in VS 2010. Now we unblock this dll programatically at addin install time.
- With DPI settings different than 96, the form of NDepend.Install.VisualStudioAddin.exe wasn't well sized.
- With DPI settings different than 96, the project chooser control in the comparison panel wasn't well sized.
- When NDepend v3 and TestDriven.NET v3 addin were both installed, a COMException might be thrown when opening a solution with VS 2010.
- In VS 2010, when installing some others addin while NDepend addin was installed, a NullReferenceException might be thrown.
- If NDepend addin already installed for VS 2010, when starting VS 2010 for the first time after VS 2010 installation, an InvalidComObjectException might be thrown.
- When closing a VS solution or when closing VS itself, if a NDepend analysis result was currently loaded, an exception could be thrown.
- A COMException could be sent when closing VisualStudio.
- On Windows XP, when starting an incremental analysis, a non-fatal ArgumentException involving a PictureBox might be thrown.
- Changing Matrix cell Weight mode or Matrix header binding from the option menu while the Matrix panel hasen't been shown yet triggered a NullReferenceException.InvalidComObjectException.
- When the runtime version of an assembly is v4.0, it might not have been shown properly in the Project Properties -> Code to Analyze -> Assemblies dataGridView -> Runtime column.
- When hitting the TAB key while editing a CQL query, the focus went to the next control instead of adding a space in the query
- In VisualStudio, when hitting the ESC key while editing a CQL query, the focus went to the code window instead of just closing the CQL Query edition intellisense box and keeping the focus.
- When having an analysis result loaded, re-analyzing while no application assemblies referenced by the NDepend project can be found, an exception was sent at the end of the analyze.
- When failing to open a source file declaration, NDepend might advised that a source file was not available at analysis time while the real cause was that the assembly's PDB file was not available at analysis time.
- When opening a source file declaration in a VS instance, if one of the existing VS instance had a modal dialog opened, the source file declaration opening was freezing until the modal dialog got closed.
Version 3.0.1.4626
Released on 5th of March 2010
Features
- When installing NDepend addin, button corresponding to non-uninstalled Visual Studio versions are disabled.
Bug Fixes
- NDepend had some problem running on 64bits machines.
- Installing NDepend Reflector v6 addin from NDepend could lead to problem.
- In the presence of certain other VS addin + NDepend addin, VS 2010 RC was freezing at startup time.
- In the presence of certain other VS addin + NDepend addin, at VS 2008 startup time, some NDepend context menus could be printed on the Window desktop.
- Certain VS project files contained some star char '*' to match several source files in a path, and this made NDepend analysis crashed.
- NDepend exes icon was pixelated in Windows taskbar, when displayed as 32x32.
- The default rule: Abstract base class should be suffixed with 'Base' didn't work with on generic base class.
Version 3.0.0.4560
Released on 24th of February 2010
Features
- Possibility to export Query result to Graph, Horizontal Matrix Header, Vertical Matrix Header, from the Export to Combo Box.
- In the NDepend circle status tooltip form, the option 'Allow showing Info as Tooltip' has been added for conveniency.
Bug Fixes
- The Assembly Build Order in the report might be wrong, it is now fixed and the Assembly Build Order is valid.
- In VisualNDepend, when some panel were closed in previous VisualNDepend sessions, an exception could occur while starting a new analysis.
- When NDepend VisualStudio addin is loaded in Visual Studio, right clicking some C++ code elements might trigger an exception.
- F# projects (.fsproj) files are now properly parsed by NDepend.
- When initializing a NDepend project from a VS 2010 solution, some assemblies might not be found.
- When saving a large graph picture, if the bitmap is too large the error is verbosely reported to the user (instead of just displaying the exception).
- In VS 2008 with NDepend addin registered, running some VS Test might hang the VSTestHost.exe behind process.
- In VS 2010 RC with NDepend addin loaded, an exception was raised when opening a root folder in Macro Explorer.
- Drag and Drop coverage file from Windows Explorer was not working in the form VS : NDepend Project properties : Analysis : Coverage Files.
- A COMException might be raised on an ASP.NET solution when right-clicking some solution project item.
Version 3.0.0.4527 (Release Candidate 1 Professional Edition)
Released on 15th of February 2010
Features: VisualStudio Integration
- Integration of all VisualNDepend panels in VisualStudio 2010, 2008 and 2005.
- A global NDepend menu lets access any of these panels.
- All NDepend features are available on right-clicking anything that can be recognized as a code-elements in the Code Editor and Solution Explorer.
- Possibility to place some NDepend menus at the first level of the code element contextual menu.
- Heuristic to infer a namespace from a solution folder and to infer a type from a solution source file.
- Possibility to interact across several opened VisualStudio instances, when a NDepend project is spawning several VisualStudio solutions.
- Animated Circle Icon that informs about analysis progression, loading progression, CQL computation progression and CQL status.
Performance and Responsiveness:
- Most of Analysis Execution in VisualNDepend or VisualStudio are 5 to 20 times faster thanks to new incremental Analysis. Incremental Analysis duration is proportional to the amount of code updated and requires generally from 1 to 5 seconds.
- Full Analysis is 40% faster.
- Loading an existing analysis result is more than 2 times faster.
- CQL Query compilation and execution is 3 times faster (typically 50 to 200 CQL rules verified per second).
- Dependency Matrix computation is an order of magnitude (x10) faster for most operations (noticeable only on large matrix).
- Background and abortable computation of Dependency Matrix and Dependency Graph.
Features: General
- Persistence of VisualNDepend sessions data including Matrix panel state (and undo), Graph panel state (and undo), Query Result panel state, Search panel state, code elements in the menu back/forward.
- Possibility to disassemble the code of a method or of a type with Reflector (language supported: IL, C#, VB.NET, Delphi, MC++, Chrome).
- Support for VS2010, .NET v4, Silverlight v3, Reflector v6.
- In Project Properties > Code to Analyze, possibility to sort between valid and invalid assemblies.
Features: Compare
- Possibility to define a Baseline for Comparison used when loading a project in VisualNDepend and VisualStudio.
- When comparing 2 builds, possibility to disassemble the 2 versions of the code of a method or of a class where CodeWasChanged and compare them with the specified source file compare tool.
- 2 new comparison facilities: Compare the currently loaded Analysis Result with another Analysis Result + Stop comparing and only keep the current Analysis Result
Features: Graph
- When pointing a node in graph, indirect caller/callee nodes are highlighted with a soft blue for callee/green for caller/red for caller/callee that differenciate them from direct caller/callee nodes.
- The keyboard shortcut Ctrl+Space takes a snapshot of the graph. It is useful to take snapshot with colored nodes by mouse hovering.
- Possibility to append to the graph a set of code elements from a CQL query result.
- Possibility to remove selected nodes in a graph and also, possibility to keep only user/used nodes of a node.
Features: CQL
- Possibility to edit several queries at the same time in the new Query Edition panel.
- New buttons: Search type by Name; Search method by Name; Create a New CQL Query
- When displaying the query result of a query containing a METHODS WHERE ... XXXWritingField \ ...XXXDeriveFrom \ Implements \ ReturnTypeIs \ FieldIsOfType \ HasAttribute clause, the targeted code element is now displayed in the query target section of the result.
- New CQL Keyword IsFinal, IsNewSlot, IsPInvokeImpl defined on method (with semantic according to their meaning in IL).
Features: NDepend Analysis and Project
- Possibility to attach a NDepend project to a VisualStudio solution.
- NDepend project files names have the extension .ndproj by default (extension .xml is still supported to preserve ascendant compatibility).
- Option menu to fine-grain customize the analysis run started from VisualNDepend or VisualStudio (Incremental/Full Analysis, reporting options, how often a Full Analysis is done...).
- When a NDepend project is modified outside of the process, the user is informed when he re-activates the VisualStudio or VisualNDepend window.
- When currently showing the most recent analysis and a more recent analysis result is available (computed from another process), the most recent result is loaded automatically when he re-activating the VisualStudio or VisualNDepend window.
- Option menu to Import/Export/Reset VisualNDepend Options.
Features: Info Panel
- Nicer display of code elements and dependencies description in InfoPanel (with hyperlink for metrics definition).
- By default, show Global Summary in the Info Panel.
- Possibility to Pin\UnPin code element and dependency description in Info View.
Behavior change:
- In build comparison, if the type of a field changed, NDepend considers that the code of the fields’ declaring type was changed (CQL condition CodeWasChanged).
- When comparing 2 analysis results in VisualNDepend and then running a new analysis on one of the 2 results, once the analysis complete, VisualNDepend is still in comparison mode.
- When comparing 2 analysis results, code elements displayed names are underlined only if the code was changed, before we underlined even if comments were changed.
- The default CQL rule 'A stateless class or structure might be turned into a static type' has been updated to avoid matching classes that have a base class and base classes that have children subclasses.
- The default CQL rule 'Methods that could be declared as 'internal' has been updated to avoid matching default constructors.
- The default CQL rule 'Classes that are candidate to be turned into Structures' has been updated to avoid matching static classes.
- Computation of the metrics LCOM and LCOM-HS defined on types no longer takes into account compiler generated members.
Bug Fixed:
- In the metric view, when displaying fields with the metric set to 'Size of Instance', right clicking a rectangle representing 'Fields inherited from XXX' raised an exception.
- After a restart of VisualNDepend, the panels could be over-sized
- The initial location of the VisualNDepend form might not be retrieved properly from the last run in multi-monitor environment.
- Dependency Matrix ToolTips might not be located properly in multi-monitor environment.
- ScrollBars were not properly displayed in the NDepend StartPage.
- When comparing 2 builds and disabling some assemblies, an exception could occur when selecting a child of a discarded assemblies in a query result.
- An exception could be raised when selecting a code element displayed in a search result, when the search result vertical space was not large enough.
- A '&' character in a comment of a CQL query declared in code source could raise an exception during analysis.
- A tab character in the body of a CQL Query in the project file could prevent the CQL compiler to run properly.
- In some cases, duplicated CQL query definition in source code could raise an exception during analysis
- In the Browse Project Dialog, clicking a header of the grid raised an exception.
- When comparing analysis, constructor(s) of a class which base class was changed was not considered as changed.
- Assemblies with forwarded types can now be analyzed.
- Method return type could not be correctly linked for abstract methods.
- An exception could be raised while analyzing some kind of obfuscated assemblies.
- An indirect usage path from a method to a field couldn't be exhibited from the Matrix to the Graph.
- An indirect usage path from a namespace parent to an assembly couldn't be exhibited from the Matrix to the Graph.
- The Visual Studio 2008 skin was disabled because several problems were caused by this particular skin.
- Saving analysis result of a very large analyzed application could take an abnormal long duration (in minutes).
- A System.UnauthorizedException was raised when trying to load an analysis result (VisualNDepend.bin) from a file with Read access only.
- When comparing assemblies, CodeWasChanged wasn't set on methods with more than 4 local variables where no code was changed except the variable usage.
- A field assigned through a 'out' or 'ref' method parameter wasn't seen as written. This could also provoke side-effect on the field IsImmutable CQL clause.
- Source code and PDB files information could be corrupted when dealing with assemblies with more than one module file.
- File ndependreport-ccnet.v2.xsl updated to solve the CruiseControl.NEt bug 1530: http://jira.public.thoughtworks.org/browse/CCNET-1530
- When doing a comparison at analysis time in 'Another project' mode, the description of the analysis result against which the comparison is done could be wrong.
- When displaying the query result of a query containing a METHODS WHERE ... XXXWritingField clause, the query targeted field was not displayed correctly.
- When editing a CQL clause DepthOfWritingField "XXX" > XXX, when displaying the intellisense number , the upper threshold displayed wasn't correct.
- In C#, when using the keyword 'class' or 'struct' in the context of generic parameters constraint, the NDepend C# parser could emit a warning.
- When a query has no code element matched, it is now shown adequately in the result area.
- CQL queries generated from dependency related menus could contains some <b> and </b> tags.
Version 2.12.1.3122 (Trial Edition) / 2.12.1.3123 (Professional Edition)
Released on 20 May 2009
Bug fixed:
- If the environment variable $APPDATA$ is not defined, NDepend reports properly this problem that prevent from installing the VisualStudio AddIn.
- If the environment variable $APPDATA$ references a network drive, NDepend can now install the VisualStudio AddIn.
- If the environment variable $APPDATA$ references a network drive or is not defined, VisualNDepend doesn't raise an exception at startup time.
Version 2.12.0.3026 (Trial Edition) / 2.12.0.3027 (Professional Edition)
Released on 27 March 2009
Feature:
- Possibility to Group Code Elements in a Query Result by Assembly/Namespace Tree or Flat/Type/Directory/File.
- New Search Panel, with numerous search options including search by: Name, Size, Complexity, Coupling, Popularity, Coverage, Visibility, Mutability, Purity, Change, Coverage of Changes
- NDepend.Console.exe option /AnalysisResultToCompareWith to give flexibility in providing a previous analysis result to compare with.
- Suffix \i to be case insensitive for string pattern following NameLike, FullNameLike, NameIs, FullNameIs.
- When a code element is both pointed by the mouse and selected by the result, in Metric view it is drawn with magenta color.
- MSBuild task is more verbose in case of failure.
- Possibility to export to an HTML document the results of all Queries (recursive) of a CQL group.
- Possibility to run an analysis on a project from the StartPage panel.
Performance:
- VisualNDepend analysis result loading performance increased by 25%.
- On large code bases, queries such as SELECT TOP X ... ORDER BY {several order by clauses} runs much faster.
Bug fixed:
- In the report, replace \ characters with \ characters. \ white spaces could provoke some issues when used with tier CI tools.
- An OutOfMemoryException could occurs while comparing 2 very large snapshot with VisualNDepend.
- When sorting query result, values 0 and N/A could be mixed.
- When minimize maximize VisualNDepend windows with the Skin set to VisualStudio2008, an exception could be raised.
- When some structures were cyclically dependent, one referencing an other as a field array element type, a StackOverflow exception could occur at analysis time.
- A query with a TOP clause such as SELECT TOP X where X was too high provoked an exception.
- Regression bug fixed: coverage metrics values appeared as N/A in the report, even when the value was available.
- An exception could be raised when changing of the headers of the dependency matrix were binded and when the matrix control height was too small.
Version 2.11.2.2839 (Trial Edition) / 2.11.2.2840 (Professional Edition)
Released on 12 December 2008
Bug fixed:
- In Trial Edition, when binding headers of the matrix, an exception could be raised when opening elements in matrix' headers.
- After closing the Graph Panel, hovering the mouse on the Matrix Panel might not be properly taken account and vice-versa.
- At analysis time, parsing some flawed Visual Studio project files could result in an ArgumentException.
- Comparing some C++/CLI program's analysis result could result in a crash.
- When the report section 'NDepend information and warning' was disabled, the Error List panel in VisualNDepend didn't display proper information.
- In the panel 'Error List' when the Warning button was unchecked, enabling a disabled warning didn't make it disappear.
- In the panel 'Error List' after an aborting analysis, when viewing 'Last Analysis Run' messages it was possible to enable/disable a warning.
- When having a project opened but not an analysis result in VisualNDepend, in the panel 'Error List' it was possible to make appear messages of the mosty recent analysis by clicking checked buttons.
Version 2.11.1.2810 (Trial Edition) / 2.11.1.2811 (Professional Edition)
Released on 4 December 2008
Bug fixed:
- Some large applications analysis could crash
- Some problems could arise on some assemblies with a special compilation (like IKVM) with duplicated setter properties.
- Some problems could arise on some assemblies with a special compilation (like IKVM) with method without visibility (only private scope).
- Some problems could arise on some assemblies with a special compilation (like IKVM) with some special Explicit Method Interface Implementation (2 pairs of parenthesis in name).
- Some problems could arise on some assemblies with a special compilation (like IKVM) with some special type with a '$' character in name.
Version 2.11.0.2776 (Trial Edition) / 2.11.0.2777 (Professional Edition)
Released on 1 December 2008
Performance:
- Analysis duration divided by 4 and memory consumed by analysis divided by 2.
Feature:
- Possibility to open from VisualNDepend the source code definition of a method written in any .NET language (C#, VB.NET, F#...) as long as the PDBs files are provided the during analysis.
- More accurate information message about source files parsing in the Error List.
- NDepend doesn't consider anymore that a class is using directly the types of the attribute that tag its base class(es).
- Silverlight default support for Silverlight 2.0 RTM (v2.0.31005.0).
Bug fixed:
- Some signed assembly couldn't be analyzed.
- When closing an analysis immediately after loaded it, a non-fatal NullReferenceException could occurs.
- The CQL condition HasAttribute "System.SerializableAttribute" was always false. It is now equivalent to the CQL condition IsSerializable.
- In the panel Error List in VisualNDepend, during an analysis clicking a cell of the row Disabled raised a NullReferenceException.
- When choosing the metric # IL Instructions in the Metric View, the metric unit was not displayed properly when pointing code elements in the treemap.
- Loading an analysis result that contains some obfuscated assemblies could potentially crash because of an XmlTextReader bug while reading character encoded with ISO/IEC 10646.
- When editing a new graph, an exception was raised if the graph panel had a width or height equal to 0.
- The values for IL Cyclomatic Complexity for methods is now increased by one to be coherent with the Cyclomatic Complexity values computed from source code.
Version 2.10.4.2597 (Trial Edition) / 2.10.4.2598 (Professional Edition)
Released on 17 October 2008
Bug fixed:
- In the report some tags might not be resolved such as $ComponentFilePluralShortUpper or $BinaryLanguageLong$.
Version 2.10.3.2579 (Trial Edition) / 2.10.3.2580 (Professional Edition)
Released on 13 October 2008
Feature:
- Possibility to remove empty row & column in Matrix.
- Possibility to remove a node in the graph.
- The default CQL rule 'Types should not extend System.ApplicationException' doesn't match anymore exception class defined in third-party assemblies.
- The default CQL rules 'Instance fields should be prefixed with a 'm_'' and 'Static fields should be prefixed with a 's_'' doesn't match anymore IsSpecialName and IsEventDelegateObject fields.
- Silverlight default support for Silverlight Release Candidate 0 (v2.0.30923.0).
Bug fixed:
- Since the previous 2.10.2 version, in Ribbon with VisualStudio 2008 Skin, ComboBox background was black when not hovered with the mouse.
- When the 'Cell Weight Mode' of the Matrix and the 'Edge Thickness' of the Graph were different, right-clicking an edge of the graph and selecting 'Open this dependency on Matrix (keeping only involved elements) or by (keeping only changed elements)' could throw an exception.
- When the 'Edge Thickness' of the Graph was set to constant, the menu displayed when right clicking an edge could contain some invalid commands in this context.
- During build comparison, ignore assemblies name case. For example System.dll and system.dll will be compared.
- The VisualNDepend options and most recent projects are now stored in the current user Application Data folder, to avoid some potential UnauthorizedAccessException when running on Windows Vista under non-admin account.
- An OutOfMemoryException could be thrown from the Graph view when drawing a 1x1 pixel box.
- After doing a Matrix View update that didn't affect the set of code elements, hovering the mouse on Matrix cells might raise an OutOfMemoryException.
Version 2.10.2.2465 (Trial Edition) / 2.10.2.2466 (Professional Edition)
Released on 25 September 2008
Feature:
- Possibility to choose the .NET Framework Targeted, v2.0, v3.5 or Silverlight v2.0 for now.
- New clause 'DepthOfInheritance == 1 // Must derive directly from System.Object' to the default CQL Query 'Classes that are candidate to be turned into Structures'
- New button 'Copy to ClipBoard Default CQL Queries' in the CQL Queries edition Option Panel.
Usability:
- In the 'Assemblies Enabled' option panel, the assemblies list can now be sorted by clicking the column header.
- For all forms when relevant, clicking one of a keyboard button Enter or Esc now leads to the OK or Cancel action.
- More facilities to export Matrix' Headers' Code Elements to Graph.
Bug fixed:
- In query result panel, the button 'export to graph' was not disabled when no query was selected.
- A type generated by compiler that only contains fields (no methods) could be considered as added/removed in comparison mode.
- When no analysis loaded, changing the query edition options could lead to a crash.
- When a VisualNDepend panel needed to be activated on various actions, such as viewing a new graph or center a code element on metric view, a NullReferenceException could arises.
- The shortcuts Ctrl+Alt+M (for Metric view) Ctrl+Alt+I (for Info view) Ctrl+Alt+R (for query Result view) Ctrl+Alt+Q (for CQL Query view) didn't work in Ribbon mode.
- Under some very rare circumstance, the computation of the treemap of the Metric view could raise a DivideByZeroException.
- In the Option menu, when using Source File Compare tool and Source File Editor tool within the same VisualNDepend session, the list of default tool displayed could be erroneous.
- When starting an analysis from VisualNDepend, a console windows was visible dusing a few milli-seconds. Now the console windows doesn't flash anymore.
- When closing VisualNDepend, an ErrorForm could flash because internally an exception could be thrown depending on the internal state.
Version 2.10.1.2403 (Trial Edition) / 2.10.1.2404 (Professional Edition)
Released on 15 September 2008
- NDepend can be executed on a machine with .NET Framework version 2.0 (or higher) installed (the previous NDepend release required v3.5 installed).
Version 2.10.0.2393 (Trial Edition) / 2.10.0.2394 (Professional Edition)
Released on 9 September 2008
New Graph Panel:
- Interactive graph with nodes and edge color update on mouse over.
- Zoom/Span/Scroll on graph and Next/Previous.
- Box Size adjustable to metrics/ Edge Thickness adjustable to metrics.
- Graph boxes and edges edition.
- Facilities across the product to generate graph.
- Graph Snapshot.
Other Features:
- Integration with Red-gate Reflector.
- Non-public types and members have a grayed fore color. Public members in non-public types are considerd non-public.
New default CQL Rules:
- Empty static constructor can be discarded.
- Type/Method/Field with name too long.
Bug fixed:
- Boxes & Arrows Graph generation was not available on 64 bits machines.
- Trying to drag the header of "RecentFileList" in the RibbonUI mode raised an unhandled exception.
- When displaying a ContextMenuStrip in the matrix, the currently pointed cell or row loose its pointed appearance.
Version 2.9.1.2235 (Trial Edition) / 2.9.1.2236 (Professional Edition)
Released on 8 August 2008
Feature:
- Possibility to choose any tier-tools to edit source files when opening the definition of a code element.
- Possibility to rebase the source files of an analysis loaded with VisualNDepend.
- Possibility to rebase the source files during analysis.
- Context Menu: Go to Method Return Type
- Context Menu: Go to Field Type
Performance enhanced:
- Loading an analysis result with VisualNDepend: 3x faster
- Dependencies Matrix computation: 5x faster
- Treemap computation for new metric or level: 3x faster
- When clicking Ok on Option panel on very large project, the UI could freeze a few seconds.
Default CQL rules:
- Do not raise reserved exception: added more reserved exceptions type.
- New rule: Abstract base class should be suffixed with 'Base'
Usability:
- Auto-Scrollbar in Project properties 'Analysis' and 'Report' panels.
- The VisualNDepend UI had some problem when displayed under DPI higher than 96 (default DPI value). It now works well from 96 to 200 DPI.
Bug Fix:
- The name of sub-group in HTML report was not properly displayed.
- When unselecting all node in Code Browser and then clicking an arrow key, an exception occured.
- When setting the Metric level to Assembly, Namespace or Type and then loading a new analysis, the metric level was shown as Method on the treemap.
- When going to reflector from VisualNDepend or VisualStudio, the UI responsivness could take a few seconds.
- When going to reflector from VisualNDepend, an exception was raised if the assembly file path was not available.
- The VisualStudio Add-In didn't work properly for VB.NET code elements outside every namespaces.
- The VisualStudio Add-In might not work properly for some VB.NET methods with some Object parameters.
- The VisualStudio Add-In didn't work properly for some localized version of VisualStudio.
- The VisualStudio Add-In could not be properly installed on some Windows Vista installations because of the AppData/Roaming - Application Data directory confusion.
- Methods that ReadsMutableTypeState were also considered as IsGeneratedByCompiler, no matter if it was generated or not.
- When Visual Studio 2008 installed and no previous Visual Studio version installed, opening a source file can fail under certain circumstances.
- Rules that didn't compile with CQL prevented following sibling rules in the same group to be displayed in the report.
- When importing some coverage data into an analysis loaded by VisualNDepend, the set of CQL queries/rules was not refreshed.
- When moving a project file with relative path mode, loading it with VisualNDepend could provoke a crash if the OutputDir didn't correspond to a valid absolute path.
- If the Output dir is a relative path and cannot be infered from the NDepend project file parent dir, the error is properly reported at analysis time.
- When using the NDepend project option 'Save As' in the Project Properties panel, the list of CQL queries was not persisted.
- Under certain circumstances, when doing consecutively 2 short analysis within the same minutes, the Output dir content could be deleted.
- Under certain circumstances, the vertical scroll bar of the Dependency Matrix was hidden when it should be visible.
- In the menu displayed on right click on the Dependency Matrix, clicking a ToolStripSeparator raised an exception.
- Copying numerous code elements (> 5K) from the Query Results to the Dependency Matrix could lead to long freeze and sometime exception.
Version 2.9.0.2187 (Trial Edition) / 2.9.0.2188 (Professional Edition)
Released on 18 June 2008
CQL v1.8:
- New condition defined on fields: IsImmutable
- New conditions defined on methods: ReadsMutableObjectState, ReadsMutableTypeState, ReadsImmutableObjectState, ReadsImmutableTypeState,
- New condition defined on assembly: IsFrameworkAssembly
- New metric: NbOverloads on Method
- New metric: NbInterfacesImplemented on Type
- New OPTIONAL: prefix in code element identifier string, to tell the CQL compiler to not emit on error when a code element is not found.
Default CQL Constraints:
- New default design constraints.
- New default constraints relative to Test Coverage and Test Coverage summary.
- New default constraints relative to Diff / Changes / Evolution and Diff summary.
- New default constraints relative to Purity / Immutability / Side-Effects
- New default constraints relative to .NET Framework usage
CQL Queries Organization enhanced:
- CQL Groups can be organize as a hierarchy.
- Drag & Drop to organize CQL Groups and CQL Queries.
- Copy / Paste of CQL Query and Group, inter VisualNDepend.exe program instances.
CQL Queries Edition and Execution enhanced:
- Immediate responsivness of the query editor, whatever the size of the query and the size of the code base analyzed.
- Undo / Redo / Reset on query edition.
- Options to enable/disable automatic run and intellisense while typing.
- Much better performance on intellisense computation.
- Highlight of query name in query edition.
- Active Urls in query edition.
CQL Queries extracted from code enhanced:
- CQL constraints extracted from source code are hierarchically organized: first level assembly, second level namespace.
- Possibility to open the declaration from VisualNDepend of a CQL constraints extracted from source code.
- Possibility to use the tags $Name$ and $FullName$ to reference the name or full-name of the code element tagged with a CQL constraints extracted from source.
- Possibility to copy to clipboard the source code excerpt to define a CQL constraint as an attribute in C# or VB.NET source code.
Tool to compare source files:
- Support for the tool DiffMerge from SourceGear.
- Support for Beyond Compare 3
Small Features:
- When doing an analysis that must be compared to a previous analysis, print the date of the analysis choose to compare with in the report.
- Possibility to compare 2 builds of a given project by right clicking on the project on the Start Page.
Bug Fix:
- Very scarcely, a KeyNotFoundException could occur when starting VisualNDepend because of a race condition bug.
- There is now a dependency created from the parent type of a method that uses the 'typeof' operator, and the type referenced by the 'typeof' operator.
- When doing build comparison, if the body of a method changed just because of an integer literal changed value, the method sometime didn't have the flag CodeWasChanged.
- When a pure C# application has at least one assembly with just interfaces, comments' metrics of the application were deemed as not available.
- In pro edition, during analysis if the license file is not found a warning is now emitted to warn that CQL constraints won't be executed.
- When starting an analysis with the option 'Compare with Most Recent Analysis' it didn't worked properly.
- When editing a CQL query on a massive code base, when switching quickly between a compiled query to a non-compilable query an exception might occured.
- When editing a long CQL query, some flickering on the edition panel could happen.
- When an interface only assembly had a logical name that didn't match its dll physical name, the analysis could crash.
- System.Runtime.InteropServices.DllImportAttribute that tags methods didn't work with the CQL condition HasAttribute.
- System.Reflection.AssemblyVersionAttribute that tags assemblies didn't work with the CQL condition HasAttribute.
- When comparing 2 builds, the relation HasAttribute could be fake on code elements of older build.
Version 2.8.1.1986 (Trial Edition) / 2.8.1.1987 (Professional Edition)
Released on 28 April 2008
Feature:
- Possibility to choose any tier-tools to compare source files when doing build comparison.
Bug Fix:
- In the ribbon page Dependencies, the Weight on cells combo box was sometime filled with improper data.
- In the ribbon pages CQL and Compare, a query relative to Coverage was sometime generated when clicking on Methods/Types/Namespaces/Assemblies check button.
- When selecting on the treemap a node matched by the current query, an exception could occur if the height of the query result DataGridView was too small.
- Under certain circumstances of matching file names, the Source file chooser dialog showed invalid declaration.
- Public class with at least one public derived class could be considered as CouldBeInternal but actually it cannot be declared as internal.
Version 2.8.0.1927 (Trial Edition) / 2.8.0.1928 (Professional Edition)
Released on 8 April 2008
CQL 1.7:
- Support for harnessing code coverage data importing from NCover 2.x or VisualStudio TeamSystem (2005 or 2008)
Metrics:
- PercentageCoverage available for Assemblies Namespaces Types Methods
- NbLinesOfCodeCovered available for Assemblies Namespaces Types Methods
- NbLinesOfCodeNotCovered available for Assemblies Namespaces Types Methods
- PercentageBranchCoverage available for Methods (NCover only)
Feature:
- Facilities in Project Properties to import coverage data during analysis run.
- Facilities to import coverage data while viewing an analysis with VisualNDepend.exe.
- Possibility to use an attribute to exclude some code element from coverage statistics (uncoverable attribute)
Bug Fix:
- The analysis could crashed when using multi-dimensions arrays inside some indexers.
- The MSBuild task had a bug while using InDir argument.
- When closing VisualNDepend, user now get warned if the underlying Windows user account doesn't have the authorization to override the VisualNDepend options file.
- The section Assembly Build Order was sometime empty in the report.
- When modifying project properties and directly run an analysis, new changes were saved but sometime not presented correctly.
Version 2.7.0.1816 (Trial Edition) / 2.7.0.1817 (Professional Edition)
Released on 6 March 2008
CQL 1.6:
- Support for Attribute: The condition HasAttribute "AttributeClassName" is now support on Assemblies, Types, Methods and Fields.
- The metric ILNestingDepth is supported on Method.
Feature:
- PDB\Symbols used to be loaded from the same director of their corresponding of assemblies file. Now, the NDepend analysis process also search in all the directory specified if the PDB file is not found in the corresponding directory of assemblies file.
- 3 default CQL constraints added: 'Code Quality (IL Nesting Depth)' ; 'Fields should be private' ; 'Structure should be immutable'.
- The NDepend.Console.exe process returns the exit code 0 if the analysis went well, 1 if an error occured and -1073741510 (0xc000013a) if the process is killed.
Performance enhancement:
- Depending on the number of processors, the RAM (i.e the fact that an analysis overused virtual memory) and if the machine is 32 or 64 bits, the analysis process will be 30 to 400% faster and will take around 40% less memory.
Bug Fix:
- Some assemblies could not be analyzed because the framework System.Reflection was unable to load them (since v2.7, NDepend doen't rely anymore on System.Reflection).
- For certain C++\CLI or MC++ assemblies, the method Assembly.GetTypes() threw an exception.
- When running on 64 bits the framework System.Reflection had problems loading some 64 bits assemblies.
- Changes in the XSL file to build report because some Warning and Error messages didn't appear in the report.
- Some corrupt-memory read exception happened rarely and randomly while analyzing assemblies on multi-core machines.
- In the the Project panel of VisualNDepend, an exception occured when trying to get an assembly from a VisualStudio project file.
- In the the Project panel of VisualNDepend, when adding assemblies referenced by a VisualStudio project or sln file, assemblies that were already considered as tiers assemblies were not added as application assemblies.
- When selecting assemblies, if they were not on a well-formed drive (such as VSS drive) an exception was raised. Now a message box explains why it is not possible.
- NDepend had problem analyzing methods that had VB optional parameter + compiled with aspnet_merge.exe.
- When using conjointly VB.NET optional parameters and aspnet_merge.exe, NDepend had problems to analyze the assemblies created.
- When using conjointly VB.NET My namespace and aspnet_merge.exe, NDepend had problems to analyze the assemblies created.
- If the underlying Windows installation didn't have the Helvetica regular font, VisualNDepend.exe could not be started. We now use the Arial font that is supported by all Windows installation.
- A method operator could be matched by optimal visibility CQl conditions but a method operator is always declared as public.
Version 2.6.3.1690 (Trial Edition) / 2.6.3.1691 (Professional Edition)
Released on 21 December 2007
Bug fix:
- Some tier code elements were not colored properly in the Class Browser panel.
Version 2.6.2.1678 (Trial Edition) / 2.6.2.1679 (Professional Edition)
Released on 19 December 2007
Feature:
- .NET assemblies dir are constantly updated to be the right one. For example, the same NDepend project can be used on a machine where the .NET framework is installed on drive C:\ and on another machine where it is on drive E:\.
- When initializing a NDepend project, if .NET 3.0 and .NET 3.5 are installed on the current machine, the .NET framework assemblies reference dirs are included automatically in the project: C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0 C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5
- In Ribbon UI mode: hide the status label at the right when the main Windows get too shrink vertically. This way, the status of CQL queries selected remains visible in this scenario.
- When opening an Url or a Report from VisualNDepend, VisualNDepend now use the default browser.
Released on 2.6.1.1619 (Trial Edition) / 2.6.1.1620 (Professional Edition)
Released on 12 December 2007
Bug Fix:
- VisualNDepend -> Project properties -> Code to Analyze -> Add assemblies of a Visual Studio solution didn't accept VS2008 solutions.
- When starting an analysis, if Windows was popping the unknow publisher dialog on NDepend.Console.exe, then VisualNDepend crashed.
Version 2.6.0.1607 (Trial Edition) / 2.6.0.1608 (Professional Edition)
Released on 10 December 2007
Improvements:
- Addin support for Visual Studio 2008.
- Support for .NET 3.0 and .NET 3.5 assemblies analysis.
- Improved VisualNDepend Startup time.
- SplashScreen at VisualNDepend startup.
- 3 new panels in VisualNDepend with a VisualStudio look and feel:
StartPage panel:
- Recent Projects list with the possibility to load project only or a previous analysis by right a click.
- Getting Started links.
- Addin Installation.
- Most recent NDepend Version
Project Properties panel:
(as a replacement for NDepend.Project.exe)
- Automatic inference of third-party assemblies from application assemblies.
- Improved folder management.
- Immediate responsiveness with asynchronous assemblies loading.
- Possibility to provide custom XSL sheet to build report.
- More documentation thanks with SuperToolTip a la Office 2007.
Error List panel:
- NDepend.Console.exe console hiding when analysis started from VisualNDepend.
- View information when currently running an analysis.
- Progress bar about currently running analysis.
- Possibility to abort current analysis.
- Possibility to enable\disable warnings.
- Possibility to copy row content in clipboard.
Bug Fix:
- When visualizing a dependency on the matrix, when doing Alt-Tab to activate another window than the VisualNDepend one, the 2 dependency tooltips were still visible and top front.
- When running 2 times an analysis on the same project within the same minute, NDepend.Console.exe crash because of a forbidden file access.
- When executing the analysis from a non-local drive, the analysis was interrupted by a Popup windows to warn about the potential problems on executing the analysis on non-local drive.
- The option panel to enable\disable assemblies took time to load on projects with a lot of assemblies, it is now immediate.
- The assemblies compiled with 'Any CPU' were tag as 'x86' in the Project Properties assembly Window.
Version 2.5.0.1382 (Trial Edition) / 2.5.0.1383 (Professional Edition)
Released on 15 October 2007
CQL v1.5: support for Optimal Visibility detection
- Following conditions are now support on Types, Methods, Fields: CouldBeInternal, CouldBeInternalProtected, CouldBeProtected, CouldBePrivate, ShouldBePublic
- CouldBeInternal is also supported on Namespaces.
- Discard of the following features from the Analysis: 'Potential Dead Code' and 'Optimal Visibility'. They are now both supported by CQL.
Bug Fix:
- Under certain circumstances, VisualNDepend couldn't be close by clicking the 'Close Window' button.
- Some DataGridView colors were not properly displayed when running on Windows Vista.
Version 2.4.2.1306 (Trial Edition) / 2.4.2.1307 (Professional Edition)
Released on 8 October 2007
Analysis Bug Fix
- The analysis crashed while analyzing Mono.Cecil v0.6 because of a special compilation issue.
Version 2.4.1.1292 (Trial Edition) / 2.4.1.1293 (Professional Edition)
Released on 24 September 2007
VisualNDepend Bug Fix
- Under certain circumstances, the CQL queries panel disappeared.
- A CQL query made of an empty string could provoke problems in the list of queries DataGridView.
- Double clicking some button with checkstyle in Ribbon pages could provoke unexpected state.
- Sometime, when starting Reflector from a menu Window from VisualNDepend, the menu window was sometime not being closed.
- Under certain circumstances, a field could be considered as written by a method when it was just loaded.
- When VisualNDepend was started from NDepend.Project, the layout saved from last session was not restored.
- Under certain circumstances, the text 'Ready' in the status bar was associated with an irrelevant icon.
Analysis Bug Fix
- Some assemblies compiled for 64 bits processor (such as System.Printing.dll) were not deemed as proper assembly.
- Under certain circumstances, assemblies files with a uppercase extension (.DLL .EXE) were not deemed as proper assembly.
Features
- Enhanced error form design and usability.
- VisualNDepend warns user if she tries to build a 'boxes and arrows graph' from matrix headers with two many code elements.
- VisualNDepend warns user if she tries to close the application while the current CQL query edited contains some unsaved changes.
- The CQL Queries panel title contains a '*' when the query has been modified and is not saved.
Version 2.4.0.1251 (Trial Edition) / 2.4.0.1252 (Professional Edition)
Released on 7 September 2007
Enhanced usability of VisualNDepend
- Use of Ribbon/ApplicationMenu/QuickStartMenu 'a la Office 2007'
- New 'Changes Explorer' tool in the Build Comparison Ribbon page.
- New 'CQL Queries and Constraints creator' tool in the CQL Ribbon page.
- New 'Select Top XXX Code Elements ordered by their current Metric Value' tool in the Metric Ribbon page.
- Docking Windows and saving/restoring of Windows arrangement when shutting down/starting VisualNDepend
- Refactoring of Menus and ToolBars (aka. CommandBar) and saving/restoring of ToolBars arrangement when shutting down/starting VisualNDepend
- Contextual help organized according to main use-cases.
- Super tooltips with 2 levels of explanations and with pictures when relevant.
- Keyboard Shortcuts for main Command and to display/reset panels.
- A new Options panel that includes:
- The possibility to choose between Ribbon UI and CommandBar UI
- A new Skin inspired from the VisualStudio2008 one
- The possibility to choose between 15 skins (the default is the VisualStudio2008 one, but we propose also Office 2007 Blue/Black/Silver, Office 2003...)
- The possibility to install/uninstall VisualStudio/Reflector Add-Ins from the Option panel
- In concerned DataGridViews, it is now clearly indicated when user can use Drag&Drop of Folder or Assembly from Windows Explorer.
- Enhanced Support/About Form.
Bug fixes & enhancements
- Some C++/CLI generic types and methods were misnamed by the analysis.
- Under very specific circumstances, the analysis pinpointed a field use where a property was used.
- The specific .NET Framework assemblies vjslib, vjswfc, vjswfchtml couldn't be analyzed because of a regression bug.
Version 2.3.0.1085 (Trial Edition) / 2.3.0.1086 (Professional Edition)
Released on 16 July 2007
NDepend add-ins for VisualStudio2005™ and Reflector
VisualNDepend Bug fixes & enhancements
- The description of an assembly now contains its full path.
- VisualNDepend close properly with a descriptive message if the user try to load an analysis where no application assemblies were found.
- The NbParameters value on methods that have generic type parameters could be wrong.
- When generating a CQL query/constraint from a VisualNDepend menu, there is no more message box asking to save the currently edited CQL query if it has not been modified.
- If NDepend quick projects (and also Newer/Older build) exists on the machine, they are automatically found and proposed in the Recent Project list.
- A warning MessageBox is displayed if the user tries to open a dependency that would lead to a giant matrix (> 500.000 cells) that can potentially triggers an OutOfMemoryException.
- Opening a source file failed if the path contains some space.
- An unhandled exception was sometime raised when trying to visualize indirect dependencies box and arrow pic involving a namespace root parent (i.e Xx.Yy.*)
- An unhandled exception was raised when trying to generate a picture from VisualNDepend and if the current picture file was read
- only.
- An unhandled exception was raised when trying to open as root a code element from a tier assembly and the dependency matrix headers were bound.
NDepend.Console analysis Bug fixes & enhancements
- Types of parameters of methods were not well named if they were generic types and also declared 'ref' or 'out'.
- NDepend analysis warns if an application assembly is referencing an outdated version of NDepend.CQL.dll.
- An information message is displayed to show how many CQL constraints are extracted from application assemblies.
- When using NDepend.CQL.CQLConstraintAttribute to declare CQL constraints inside your code, the attributes were sometime not properly extracted because of some versioning issues.
- It is now considered as a 'non
- fatal error' when an application assembly cannot be analyzed because a tier assembly cannot be found.
- The instance field 'value__' of an enumeration type is not considered anymore as an 'IsEnumValue'.
- The analysis doesn't crash anymore if several assemblies with the same name are provided.
- The query name is available in the Queries/Query/@Name attribute in the CQLResult.xml file.
NDepend.Project analysis Bug fixes
- There is no more unexpected exceptions when trying to launch VisualNDepend on previous analysis or trying to see older reports and the NDepend project file was not created yet.
- Some assembly could not be considered as managed under certain conditions (file extension casing, incremental compilation).
Version 2.2.2.886 (Trial Edition) / 2.2.2.887 (Professional Edition)
Released on 20 May 2007
VisualNDepend bug fix
- Dependencies Matrix tooltips were flashing on Windows Vista when Aero was activated.
- Forbid to enable/disable CQL queries and groups extracted from code.
- Under some particular conditions, a modified namespace was shown as non-modified.
NDepend.Console analysis bug fix:
- Some non Explicit Interface Method Implementation (EMEI) were considered as EMEI.
Version 2.2.1.841 (Trial Edition) / 2.2.1.842 (Professional Edition)
Released on 7 May 2007
VisualNDepend feature
- For each CQL constraint, possibility to include in the report the VisualNDepend pic with code elements selected.
VisualNDepend bug fix
- When switching from one project to another, in some rare circumstance a NullReferenceException was raised.
- When saving CQL queries and the underlying project file was read-only, an exception was raised.
NDepend.Console analysis bug fix:
- While parsing C# file, some sort of '// comments' at the end of the file were causing an exception.
- While parsing C# file, if the type was inheriting from some generic types, its declaration in source file couldn't be opened from VisualNDepend.
- The analyzer now tolerates application without IL instructions in order to let users analyze assemblies and application only made of interfaces.
- Regression corrected that yielded 'assemblies cycles warning' in report even if no cycles were found.
Version 2.2.0.811 (Trial Edition) / 2.2.0.812 (Professional Edition)
Released on 2 May 2007
CQL 1.4
- Query naming with tags <Name> and </Name>
- Immutability on types and methods: ChangesObjectState M ; ChangesTypeState M ; IsImmutable T
- Which method write which field: IsDirectlyWritingField M ; IsWritingField M ; DepthOfIsWritingField M
Ergonomy in VisualNDepend
- Possibility to browse back and forth previously selected code elements
NDepend.Project.exe / NDepend.Console.exe
- Possibility to do build comparison during analysis
Version 2.1.1.766 (Trial Edition) / 2.1.1.767 (Professional Edition)
Released on 12 apr 2007
Bugs fixed in VisualNDepend
- #Items was sometime false in the query result
- Intellisense on float could raise an exception under special conditions
- Some special characters were problematic to insert while editing CQl querieswith special regex.
- Build Comparison could yield false results on some classes and methods generated by compiler for anonymous methods under special conditions
Ergonomy in VisualNDepend
- Better ergonomy on Build Comparison Panel
Ergonomy in NDepend.Project
- Better ergonomy to handle and edit input and output folders
Optimized NDepend.Console analyze
- Reduced memory set that allows to analyze bigger applications on 32 bits machine (up to 5.5M IL instructions, around 800K LOC).
Version 2.1.0.736 (Trial Edition) / 2.1.0.737 (Professional Edition)
Released on 28 mar 2007
VisualNDepend.exe
- Support for build comparison on tree code view, dependency view
- Support for CQL 1.3
- Better support for dependencies between enumeration and methods.
CQL 1.3
- New boolean conditions: IsGeneratedByCompiler, IsObsolete, IsSpecialName
- New boolean conditions dedicated to build comparison: WasChanged, WasAdded, WasRemoved, CodeWasChanged, CommentsWereChanged, VisibilityWasChanged, BecameObsolete, IsUsedRecently, IsNotUsedAnymore, IsUsedDifferently, IsInNewerBuild, IsInOlderBuild
- New code structure condition: ReturnType
Version 2.0.6.676 (Trial Edition) / 2.0.6.677 (Professional Edition)
Released on 21 fev 2007
- Bug fix : initializing a project from a Solution file that references some Web
Version 2.0.5.661 (Trial Edition) / 2.0.5.662 (Professional Edition)
Released on 13 fev 2007
- Quick selection of assemblies to analyze from VisualNDepend.exe
- Support for Windows 64 bits
- Bug fixes.
Version 2.0.4.640 (Trial Edition) / 2.0.4.641 (Professional Edition)
Released on 01 fev 2007
- Availability of Trial and Professional Editions (Not in betas anymore).
- Ability to choose between relative and absolute paths to your assemblies in NDepend project XML files.
- Minor ergonomy improvements in VisualNDepend.
- Bug fixes.
Version 2.0.3.479 (Release Candidate 1)
Released on 13 dec 2006
NDepend.Console.exe
- Better performance
- Automatic detection if a new version is available for download
NDepend.Project.exe
- Possibility to initialize or complete a project from a VisualStudio 2005 solution (.sln) or project file (.csproj .vbproj)
- Sort warnings by category
- Open source file position corresponding to a warning
VisualNDepend.exe
- Dependencies view with many options
- Boxes and arrows dependencies graph generation
- Facilities to find dependency cycles at any level (namespaces/types/methods).
- Support for C# source code metric (Lines of code, Comments, Cyclomatic Complexity)
- Namespace Hierarchy Mode : Tree or Flat
- Open source file position for definitions of namespaces, types, methods
- More support for CQL query automatic generation
- Supports CQL 1.2
- Better ergonomy
- New metrics: CyclomaticComplexity TM, NbLinesOfComment ANTM, PercentageComment ANTM, AssemblyLevel A, NamespaceLevel N, TypeLevel T, MethodLevel M,
- New keywords: HasLevel ANTM, ContainsNamespaceDependencyCycles A, ContainsTypeDependencyCycles N, ContainsMethodDependencyCycles T
- Wildcard support for namespace names
CQL 1.2
Version 2.0.2.0 (beta2)
Released on 26 aug 2006
NDepend.Console.exe
- Better performance (up to 1M IL instructions analyzed/minutes), New command line options /InDirs /OutDir /Help /Silent /XslForReport /EmitVisualNDependBinXml
NDepend.Project.exe
- Better ergonomy
VisualNDepend.exe
- Better ergonomy, support CQL 1.1, support framework assemblies
- CQL 1.1: New keywords: NbLinesOfCode, IsDirectlyUsing, IsDirectlyUsedBy, TypeRank, MethodRank, IsInFrameworkAssembly, IsUsingPinning, IsExplicitInterfaceImpl, IsFinalizer, IsEntryPoint, HasFinalizer, FieldCa, MethodCe, MethodCa, NamespaceCe, NamespaceCa, Better code elements naming convention (especially for generics),
- warns about assemblies versioning issues
- warns if PDB files are not in-sync with source files
- interaction between VisualNDepend.exe and Visual Studio .NET (2002, 2003, 2005) (double click on a method opens its source definition)
- new NbLinesOfCode metric (require the presence of PDB files of application assemblies)
- new MethodRank, TypeRank metrics based on Google PageRank
- new FieldCa, MethodCe, MethodCa, NamespaceCe, NamespaceCa metrics
- new internal code structure abstract model which will allow Java, C++ or C++/CLI analysis (a C++/CLI code structure provider is currently developed)
- all known bugs fixed
Version 2.0.1.0 (beta1)
Released on 04 apr 2006
- Support for .NET 2.0 assemblies.
- Support for the Code Query Language.
- Add the NDepend.Project.exe
- Add the VisualNDepend.exe UIs.
- Add the Size Of Instance metric.
- IL analysis powered by Cecil.
Version 1.3.2
Released on 6 aug 2004
- Solve a bug on multi directory application (thanks to Ole Kaare Andresen)
Version 1.3.1
Released on 11 jul 2004
- Wildcard facility for member visibility filters
- Regression bug correction concerning assemblies instability computation (thanks to Frans Bouma).
Version 1.3.0
Released on 3 jun 2004
- New metrics Types (CC, LCOM, RFT…).
- Some optimization and refactoring of source code.
Version 1.2.0
Released on 13 May 2004
- New metrics concerning IL instructions (Total IL inst…).
- Analyze of optimal visibility and uselessness of a type or a member.
- Analyze at IL instruction level (thanks to ILReader from Lutz Roeder)
- Complete refactoring of source code.
Version 1.1.0
Released on 28 apr 2004
- Drawing projects dependencies diagram (thanks to Jonathan de Halleux). Enhanced Application statistics (std dev…)
Version 1.0.0
Released on 26 apr 2004
- Initial public release.