DimonSmart.DynamicLeakAnalyzer
1.0.2
Prefix Reserved
See the version list below for details.
dotnet add package DimonSmart.DynamicLeakAnalyzer --version 1.0.2
NuGet\Install-Package DimonSmart.DynamicLeakAnalyzer -Version 1.0.2
<PackageReference Include="DimonSmart.DynamicLeakAnalyzer" Version="1.0.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
<PackageVersion Include="DimonSmart.DynamicLeakAnalyzer" Version="1.0.2" />
<PackageReference Include="DimonSmart.DynamicLeakAnalyzer"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add DimonSmart.DynamicLeakAnalyzer --version 1.0.2
#r "nuget: DimonSmart.DynamicLeakAnalyzer, 1.0.2"
#:package DimonSmart.DynamicLeakAnalyzer@1.0.2
#addin nuget:?package=DimonSmart.DynamicLeakAnalyzer&version=1.0.2
#tool nuget:?package=DimonSmart.DynamicLeakAnalyzer&version=1.0.2
DimonSmart.DynamicLeakAnalyzer
Roslyn analyzer that detects unintended dynamic leaks: implicit conversions from dynamic to static types (DSM001) and var inferred as dynamic (DSM002).
Install
<ItemGroup>
<PackageReference Include="DimonSmart.DynamicLeakAnalyzer" Version="0.1.0" PrivateAssets="all" />
</ItemGroup>
Strict .editorconfig
Recommended settings to surface leaks early:
root = true
[*.cs]
# Report dynamic -> object (disabled by default)
dsmdynamicleak_ignore_dynamic_to_object = false
# Analyze generated code if you want it included (default false)
dsmdynamicleak_analyze_generated_code = false
# Standard severity control
# dotnet_diagnostic.DSM001.severity = warning
# dotnet_diagnostic.DSM002.severity = warning
Suppress allowed zones
Use the attribute to allow dynamic usage inside specific members or types:
using DimonSmart;
[DimonSmartAllowDynamicLeak]
public int Parse(dynamic row) => row.Value;
Suppression applies to DSM001 and DSM002 inside the attributed member or type.
Examples
DSM001 - implicit dynamic conversion:
Before:
int M(dynamic d)
{
return d; // DSM001
}
After:
int M(dynamic d)
{
return (int)d;
}
DSM002 - var inferred as dynamic:
Before:
var x = GetValue(dynamicRow); // DSM002
After:
dynamic x = GetValue(dynamicRow);
// or
int x = (int)GetValue(dynamicRow);
Recommended style
Allow dynamic in boundary layers (interop, JSON/DB adapters, integration code), but stop leaks before they reach core domain logic.
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.