Skip to content
lint-dotnet logo

/lint-dotnet

lint-dotnet

Run .NET architecture linter to check for MSBuild/CPM violations

aiskillstore/marketplace0installs430stars

SKILL.md

Full skill instructions

/​lint-dotnet

Run the .NET architecture linter on demand to check for violations.

Execution

bash "${CLAUDE_PLUGIN_ROOT}/​scripts/​lint-dotnet.sh" .

Output Format

RULE_X|file
  line_number: violation details

Rules

RuleCatchesFix
RULE_AHardcoded Version="1.2.3" in Directory.Packages.propsUse $(VariableName) and define in Version.props
RULE_BVersion.props imported outside allowed filesRemove import. Only DPP or eng/​DBP allowed.
RULE_CVersion.props not a symlink (in consumer repos)Recreate symlink, never copy the file
RULE_G<PackageReference Version="..."> in .csprojRemove Version attr, use CPM

Allowed Version.props Import Owners

FilePurpose
Directory.Packages.propsCPM-enabled projects
eng/​Directory.Build.propsCPM-disabled projects
src/​Sdk/​*/​Sdk.propsSDK entry points (MSBuild auto-imports these)
src/​common/​*.propsShared SDK infrastructure

All other files importing Version.props = violation.

Clean Output

CLEAN|All rules passed

No violations found. Safe to proceed.

Variable Naming Convention

For unknown packages, generate variable name:

  • Some.Package.Name -> SomePackageNameVersion
  • Remove dots and dashes, append "Version"