NDepend Changelog

What's new in NDepend 2024.1.0.9730

Mar 25, 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.

New in NDepend 2023.2.3.9706 (Dec 7, 2023)

  • Bug Fixed:
  • A NullReferenceException could be raised when clicking the menu Explore Code Coverage while the metric view hasen't been shown yet.

New in NDepend 2023.2.2.970 (Nov 23, 2023)

  • Analysis can run on .NET 8, Bugs fixed

New in NDepend 2023.2.1.9701 (Oct 18, 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.

New in NDepend 2023.2.0.9700 (Oct 16, 2023)

  • Report Redesigned, Issue Explanation, net8.0

New in NDepend 2023.1.2 (Oct 2, 2023)

  • Bug fixed

New in NDepend 2023.1.1 (Jun 19, 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.

New in NDepend 2023.1.0 (Mar 8, 2023)

  • Important Usability and Code Model improvements

New in NDepend 2022.2.1 (Nov 10, 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.
  • 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%LocalJetBrainsToolboxappsRiderch-02022.4167.23binrider64.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.

New in NDepend 2022.2.0 (Oct 17, 2022)

  • GitHub Action, .NET 7, C#11

New in NDepend 2022.1.4 (Jun 10, 2022)

  • Bugs fixed.

New in NDepend 2022.1.3 (May 12, 2022)

  • Bugs fixed

New in NDepend 2022.1.2 (Apr 21, 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.

New in NDepend 2022.1.1 (Apr 1, 2022)

  • 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.

New in NDepend 2022.1.0 (Mar 16, 2022)

  • Report Improvements, ILSpy Integration, VS2022 Theming...

New in NDepend 2021.2.5 (Dec 16, 2021)

  • Improvements, Bugs fixed

New in NDepend 2021.2.4 (Nov 25, 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 bindebug directory instead of binDebug 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$UbuntuhomeusrProjectsfoofoo.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.

New in NDepend 2021.2.3 (Nov 22, 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.

New in NDepend 2021.2.2 (Nov 15, 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.

New in NDepend 2021.2.1 (Nov 8, 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 FilesReference AssembliesMicrosoftFramework.NETFrameworkv4.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.

New in NDepend 2021.1.0 (Jan 28, 2021)

  • Xamarin, Unity, UWP, NCrunch support and more

New in NDepend 2020.2.1 (Nov 25, 2020)

  • Bug fixes

New in NDepend 2020.2.0 (Oct 8, 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.

New in NDepend 2020.1.2 (Jun 30, 2020)

  • 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

New in NDepend 2020.1.1 (Jun 2, 2020)

  • Analysis improvements,
  • Bug fixes

New in NDepend 2019.3.0 (Oct 14, 2019)

  • Improved baseline experience, Bug fixes

New in NDepend 2019.2.7 (Sep 5, 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.

New in NDepend 2019.2.6 (Jul 15, 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.

New in NDepend 2019.2.4 (Jun 4, 2019)

  • Bug fixes, Less false positive.

New in NDepend 2019.2.3 (May 15, 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.

New in NDepend 2019.2.2 (Apr 22, 2019)

  • Bug fixes

New in NDepend 2019.2.0 (Mar 15, 2019)

  • 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 globalisation and date format changed from default, trend charts didn't load correctly.

New in NDepend 2019.1.1 (Feb 18, 2019)

  • Bug fixes

New in NDepend 2019.1.0 (Jan 31, 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.

New in NDepend 2018.2.1 (Sep 20, 2018)

  • Bugs fixed:
  • Sometime running the NDepend analysis can lead to an error claiming that no application assembly found during analysis

New in NDepend 2018.1.1 (May 17, 2018)

  • Bug fixes

New in NDepend 2018.1.0 (Mar 7, 2018)

  • Dark Theme support, DDD, Less false positive

New in NDepend 2017.3.2 (Nov 13, 2017)

  • Bug fixes

New in NDepend 2017.3.1 (Oct 14, 2017)

  • Bug fixes

New in NDepend 2017.3.0 (Oct 4, 2017)

  • .NET Core 2.0 support, NuGet support, Less false positive

New in NDepend 2017.2.2 (Aug 1, 2017)

  • Bug fixes

New in NDepend 2017.2.1 (Apr 27, 2017)

  • UI improvements and bugs fix

New in NDepend 2017.2.0 (Apr 21, 2017)

  • Improved Integration and Diagram

New in NDepend 2017.1.1 (Feb 10, 2017)

  • Improvements and bug fixes

New in NDepend 6.2.1.8630 (Dec 11, 2015)

  • Bugs fixed:
  • Rarely, after an analysis run in VisualNDepend or NDepend VS Extension, an InvalidOperationException could be thrown.

New in NDepend 6.2.0.8620 (Dec 2, 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 was 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 cliking 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 provoqued 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 NullreferencedException 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.

New in NDepend 6.1.0.8600 (Sep 24, 2015)

  • Improvements:
  • The control used to choose a directory is now a BreadCrumb edit control, that provides the same user experience than in Windows Explorer.
  • When creating a temporary project, the previous temporary project file is backuped to avoid loosing any change in case the user has edited it.
  • When VSIXInstaller.exe (launched by NDepend.VisualStudioExtension.Installer.exe) returns the 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 address the power of nowadays machine.
  • All menus that shows the list of stored analysis result for the current project now starts with a new button named "Browse for a NDepened analysis result file (.ndar extension)" to be able 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's 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 menu "Problem with this Project File" 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 menu "Delete" now has the more explicit text: "Remove Reference to this Rule File"
  • In Project Properties > Path Referenced, if no analysis result is loaded the user cannot go to Rule Files edit. Now, if the user tries to go to Rule Files edit in this situation, a message box explains the user why she cannot.
  • In Project Properties > Path Referenced, if an analysis is running the user cannot 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 user why she 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:
  • Convenients extension methods have been added in NDepend.Analysis.ExtensionMethodsProjectAnalysis: BuildAnalysisResultRefFor(this analysisResultFilePath) ; LoadAnalysisResultFromFile(this project, analysisResultFilePath) ; LoadCodeBaseFromAnalysisResultFile(this analysisResultFilePath)
  • A convenient 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 several seconds long Garbage Collection.
  • 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 provoque 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 version 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, and action that provoqued crash could be done.
  • If all trend metric queries were defined under a rule file, asking to create a new trend chart didn't work.
  • 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.
  • Rarely, an ArgumentException could be thrown when attempting to release some resources, when storing or restoring from the VisualStudio 2013 or 2015 .suo file, the attached NDepend project file path.
  • Changing the width of the Code Query Edit panel in DPI 200% could provoke 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.
  • 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, when a query group was selected, it didn't render well.

New in NDepend 6.0.0.8560 RC 3 (Jul 1, 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.

New in NDepend 6.0.0.8555 RC 2 (Jun 13, 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
  • Bugs fixed:
  • 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 / deployement to warn the user about issue as soon as possible.

New in NDepend 6.0.0.8550 RC1 (Jun 11, 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.
  • Enhanced NDepend global menus.
  • A NDepend project can now be attached to a VS solution file (.sln) or to a VS solution user options file (.suo).
  • 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.
  • It is now possible to insert tags and in code rules source code comment.
  • More than 30% of default code rules source code have been refined to offer more detailled results with less false positives.
  • UI Enhancements:
  • The Metric View can now display a second metric by coloring the treemap elements.
  • In Rules and Queries result, percentage Code Coverage values are now displayed with a proprotional green/red color scheme.
  • 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 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 accross 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 consummed 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:
  • 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 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 accross TeamCity builds
  • Facility to define a TeamCity prior build as a NDepend baseline for comparison
  • NDepend report and analysis result stored as TeamCity build artefacts
  • 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)
  • 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 provoque anymore the group selection.
  • The Query Edit TextBox didn't support special encoding characters, like cyrillics, 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, provoque 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 choosen, 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 provoqued 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 choosen 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.

New in NDepend 5.4.1.8430 (Sep 16, 2014)

  • Rules Enhancement:
  • The default rule 'Types with too many methods' has been refined to avoid couting 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 provoque 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.

New in NDepend 5.4.0.8391 (Aug 2, 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 provoqued by the node selection.
  • In Query Explorer, when no group is selected, clicking the Delete Group button provoqued an exception
  • In the report, the Main > Summary of Rules violated > DataGridView Header contained an unecessary 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 tag instead of 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.

New in NDepend 5.3.0.8360 (Aug 2, 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 serie row in the DataGridView through a Delete key press, the row was deleted but the serie 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.

New in NDepend 5.2.1.8320 (Feb 26, 2014)

  • Bug fixed:
  • When modifiying 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.

New in NDepend 5.2.1.8310 (Feb 25, 2014)

  • Bug fixed:
  • When modifiying 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.

New in NDepend 5.2.0.8280 (Feb 5, 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 detailled 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.

New in NDepend 5.1.0.8180 (Dec 5, 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 acount.
  • 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 environement 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 detailled 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 provoqued 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 provoque 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 cliking 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 Dahsboard panel lead to duplicatced 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).

New in NDepend 5.1.0.8085 (Dec 5, 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 thrownw when using the panel Search.

New in NDepend 4.1.0.6871 (Mar 28, 2013)

  • 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 infered 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.

New in NDepend 4.0.2.6750 (Mar 28, 2013)

  • 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 provoqued 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 provoque 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.

New in NDepend 4.0.1.6475 (Mar 28, 2013)

  • 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!

New in NDepend 4.0.0.6345 (Mar 28, 2013)

  • 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 Versionning 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 'Analyse a set of .NET Assemblies' didn't provoked the row selection.
  • Toolips 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.

New in NDepend 3.9.0.5848 (Mar 28, 2013)

  • 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 deinstalling 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 provoque 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 cliking 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.

New in NDepend 3.8.1.5706 (Mar 28, 2013)

  • 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.

New in NDepend 3.7.0.5526 (Mar 28, 2013)

  • 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.