altcode.gendarme 2022.1.17.12282-pre-release

This is a prerelease version of altcode.gendarme.
There is a newer version of this package available.
See the version list below for details.
The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
Install-Package altcode.gendarme -Version 2022.1.17.12282-pre-release
dotnet add package altcode.gendarme --version 2022.1.17.12282-pre-release
<PackageReference Include="altcode.gendarme" Version="2022.1.17.12282-pre-release" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add altcode.gendarme --version 2022.1.17.12282-pre-release
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: altcode.gendarme, 2022.1.17.12282-pre-release"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install altcode.gendarme as a Cake Addin
#addin nuget:?package=altcode.gendarme&version=2022.1.17.12282-pre-release&prerelease

// Install altcode.gendarme as a Cake Tool
#tool nuget:?package=altcode.gendarme&version=2022.1.17.12282-pre-release&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.


A Mono.Gendarme fork, built against a recent Mono.Cecil version, one that can load assemblies built with current compilers.


  • Can load .net core assemblies
    • Will search the nuget cache for dependencies, though this can take some time as an alternative to using dotnet publish to get all the code you want to analyse in one place.
  • Will load debug information from embedded symbols or actual .pdb files if available even on non-Windows platforms.
    • The main impact is that the AvoidLongMethodsRule works by LoC and not IL against .net core code on all platforms.
  • Because they use obsolescing functions not present in netstandard2.0 the following Gendarme.Rules.Security.Cas rules are not implemented in the global tool version (so if this is relevant to you, use the .net Framework build):
    • AddMissingTypeInheritanceDemandRule
    • DoNotExposeMethodsProtectedByLinkDemandRule
    • DoNotReduceTypeSecurityOnMethodsRule
    • SecureGetObjectDataOverridesRule
  • The obsolete Gendarme.Rules.Portability.MonoCompatibilityReviewRule is not implemented in this fork.
  • DefineAZeroValueRule does not trigger for non-int32 enums that have a suitably typed zero value. This rule should not also be doing the job of EnumsShouldUseInt32Rule
  • Due to IL changes UseIsOperatorRule has been tuned to avoid false positives at the cost of missing some failure cases

Known Issues

Not all the classic Gendarme unit tests currently pass. In the main, these failures are due to the Roslyn compiler producing different IL than the original C# compiler did. A few failures are due to the API changes in .netstandard compared with the .net Framework. In production these will typically manifest as false negatives.

Changes made for F# support

The F# compiler generates a large amount of code that does not conform to these rules, particularly with closures. A full list for the most recent release is presented here.


Build AppVeyor Build status Build history
GitHub CI Build history
There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2022.5.17.8260 53 5/17/2022
2022.5.15.11273 54 5/15/2022
2022.2.17.8350 239 2/17/2022

This build from

• net40 build removed; the Framework tool now uses shared netstandard2.0 assemblies with a net472 executable.  This also means that the stale code access security rules are now removed --
  ◦ AddMissingTypeInheritanceDemandRule
  ◦ DoNotExposeMethodsProtectedByLinkDemandRule
  ◦ DoNotReduceTypeSecurityOnMethodsRule
  ◦ SecureGetObjectDataOverridesRule
• In the text output, include a specimen global suppression attribute for each issue (F# syntax, ready to copy and paste; for other languages, tweak the [<>] part of the declaration).  This is for convenience when dealing with intractable issues e.g. arising from code generation
  ◦ While Scope is not heeded by the Gendarme process, it's there to placate other consumers (which will ignore the foreign rule); the comment indicates the corresponding object type within the Gendarme analysis in case they should ever be out of line.
  ◦ The syntax and punctuation of the Target with regards to nested types and special names is as Gendarme expects, which differs somewhat from FxCop in annoying details
Global Suppression Attribute:
[assembly: SuppressMessage(Gendarme.Rules.Correctness,
                           Scope = member, // MethodDefinition
                           Target = ParameterNamesShouldMatch.Handler::ShowMessage(a,System.String),
                           Justification = )]

• Fixes DoNotLockOnThisOrTypesRule for current C# compiler IL generation
• Reenable several rules omitted in previous builds
  ◦ bad practice rules AvoidNullCheckWithAsOperatorRule and DoNotDecreaseVisibilityRule
  ◦ design rule DoNotDeclareSettersOnCollectionPropertiesRule (excluding the PermissionSet exemption)
  ◦ exception rule DoNotThrowInNonCatchClausesRule
  ◦ globalization rules PreferIFormatProviderOverrideRule and PreferStringComparisonOverrideRule

For previous releases, go here --