diff --git a/.changeset/README.md b/.changeset/README.md
deleted file mode 100644
index 654c6d4..0000000
--- a/.changeset/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Changesets
-
-Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
-with multi-package repos, or single-package repos to help you version and publish your code. You can
-find the full documentation for it [in our repository](https://github.com/changesets/changesets).
-
-We have a quick list of common questions to get you started engaging with this project in
-[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md).
diff --git a/.changeset/breezy-suits-teach.md b/.changeset/breezy-suits-teach.md
deleted file mode 100644
index ac47e04..0000000
--- a/.changeset/breezy-suits-teach.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-Fixed default variable issue
diff --git a/.changeset/busy-apes-type.md b/.changeset/busy-apes-type.md
deleted file mode 100644
index 4e1efbb..0000000
--- a/.changeset/busy-apes-type.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-Fixed incorrect .git folder detection
diff --git a/.changeset/config.json b/.changeset/config.json
deleted file mode 100644
index 5c58ec9..0000000
--- a/.changeset/config.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json",
- "changelog": "@changesets/cli/changelog",
- "commit": false,
- "fixed": [],
- "linked": [],
- "access": "restricted",
- "baseBranch": "main",
- "updateInternalDependencies": "patch",
- "ignore": []
-}
diff --git a/.changeset/dry-crabs-join.md b/.changeset/dry-crabs-join.md
deleted file mode 100644
index 2d90785..0000000
--- a/.changeset/dry-crabs-join.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-added versioning caching per-session
diff --git a/.changeset/eager-doodles-strive.md b/.changeset/eager-doodles-strive.md
deleted file mode 100644
index 9afa9f0..0000000
--- a/.changeset/eager-doodles-strive.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-now copying .editorConfig and global.json into project structure
diff --git a/.changeset/eleven-pandas-agree.md b/.changeset/eleven-pandas-agree.md
deleted file mode 100644
index 6fa5077..0000000
--- a/.changeset/eleven-pandas-agree.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-"changeops": patch
----
-
-- Added support for auto including Shared*.csproj files
-- Added Strict mode on package.json version
diff --git a/.changeset/four-cycles-doubt.md b/.changeset/four-cycles-doubt.md
deleted file mode 100644
index 73d5cf5..0000000
--- a/.changeset/four-cycles-doubt.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-fixed IsCLIProject properties
diff --git a/.changeset/fruity-stars-check.md b/.changeset/fruity-stars-check.md
deleted file mode 100644
index b0d7443..0000000
--- a/.changeset/fruity-stars-check.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-hardenend version detection
diff --git a/.changeset/funky-rats-hug.md b/.changeset/funky-rats-hug.md
deleted file mode 100644
index afe888f..0000000
--- a/.changeset/funky-rats-hug.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-fixed editorconfig props not exposed to VS correctly
diff --git a/.changeset/gentle-tires-attend.md b/.changeset/gentle-tires-attend.md
deleted file mode 100644
index 45ef5aa..0000000
--- a/.changeset/gentle-tires-attend.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-updated to support different substitite frameworks
diff --git a/.changeset/large-buses-poke.md b/.changeset/large-buses-poke.md
deleted file mode 100644
index 422c09d..0000000
--- a/.changeset/large-buses-poke.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": major
----
-
-initial release
diff --git a/.changeset/lucky-glasses-battle.md b/.changeset/lucky-glasses-battle.md
deleted file mode 100644
index d4cee1d..0000000
--- a/.changeset/lucky-glasses-battle.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-hardended aspire host defaults
diff --git a/.changeset/olive-poets-live.md b/.changeset/olive-poets-live.md
deleted file mode 100644
index 4fbd49e..0000000
--- a/.changeset/olive-poets-live.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-fixed issues with sdk file location when packaged
diff --git a/.changeset/petite-rabbits-hide.md b/.changeset/petite-rabbits-hide.md
deleted file mode 100644
index 42bd9fb..0000000
--- a/.changeset/petite-rabbits-hide.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-expanded support for CLI
diff --git a/.changeset/pre.json b/.changeset/pre.json
deleted file mode 100644
index a943644..0000000
--- a/.changeset/pre.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "mode": "pre",
- "tag": "prerelease",
- "initialVersions": {
- "changeops": "0.0.0"
- },
- "changesets": [
- "breezy-suits-teach",
- "busy-apes-type",
- "dry-crabs-join",
- "eager-doodles-strive",
- "eleven-pandas-agree",
- "four-cycles-doubt",
- "fruity-stars-check",
- "funky-rats-hug",
- "gentle-tires-attend",
- "large-buses-poke",
- "lucky-glasses-battle",
- "olive-poets-live",
- "petite-rabbits-hide",
- "rich-candles-relax",
- "strict-schools-chew",
- "thick-snails-bathe",
- "tiny-pears-burn",
- "warm-phones-repair"
- ]
-}
diff --git a/.changeset/rich-candles-relax.md b/.changeset/rich-candles-relax.md
deleted file mode 100644
index e34077a..0000000
--- a/.changeset/rich-candles-relax.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-added embedded attribute gen"
diff --git a/.changeset/strict-schools-chew.md b/.changeset/strict-schools-chew.md
deleted file mode 100644
index 55c45e1..0000000
--- a/.changeset/strict-schools-chew.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-InternalsVisibleTo for shared testing infra
diff --git a/.changeset/thick-snails-bathe.md b/.changeset/thick-snails-bathe.md
deleted file mode 100644
index 33789a6..0000000
--- a/.changeset/thick-snails-bathe.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-fixed test project namespace generation
diff --git a/.changeset/tiny-pears-burn.md b/.changeset/tiny-pears-burn.md
deleted file mode 100644
index 304167a..0000000
--- a/.changeset/tiny-pears-burn.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-fixing default values
diff --git a/.changeset/warm-phones-repair.md b/.changeset/warm-phones-repair.md
deleted file mode 100644
index 0c1e840..0000000
--- a/.changeset/warm-phones-repair.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"changeops": patch
----
-
-Make SDK property conditions explicit and harden executable project detection for top-level Program.cs projects.
diff --git a/README.md b/README.md
index d1e8a50..27d8730 100644
--- a/README.md
+++ b/README.md
@@ -227,7 +227,7 @@ Version detection logging is disabled by default. Set `VersionDetectionLogEnable
| `NamespacePrefix` | *(required)* | Root namespace prefix, e.g. `Acme`. Results in `Acme.MyProject`. |
| `DisableNamespacePrefixCheck` | `false` | Set to `true` to suppress the build error for missing `NamespacePrefix`. |
| `TargetFramework` | `net10.0` | Override the default TFM per-project or globally. Defaults to `netstandard2.0` for projects declaring `IsRoslynComponent=true`. |
-| `IsRoslynComponent` | `false` | When explicitly `true`, applies source-generator defaults for a single `netstandard2.0` target, analyzer rules, SourceLink, generated-file output, dependency output, symbol packaging, telemetry exclusion, and package build output. |
+| `IsRoslynComponent` | `false` | When explicitly `true`, applies source-generator defaults: a single `netstandard2.0` target, `LangVersion=latest`, `Nullable=enable`, `TreatWarningsAsErrors=true`, extended analyzer rules, SourceLink, generated-file output, dependency output, symbol packaging (`IncludeSymbols=false` by default), telemetry exclusion, and package build output. Packable Roslyn components automatically pack the built analyzer assembly (and its PDB) into `analyzers/dotnet/cs/`. Roslyn development dependencies (`Microsoft.CodeAnalysis.*`, `Microsoft.CodeAnalysis.Analyzers`) default to `PrivateAssets="all"`. |
| `PackProjectReferencedSourceGenerators` | `true` | Automatically packs analyzer `ProjectReference` outputs and their runtime dependencies under `analyzers/dotnet/cs/`. Set to `false` to opt out; set `Pack="false"` on an individual reference to exclude only that generator. |
| `SourceLinkPackageName` | `Microsoft.SourceLink.GitHub` | SourceLink provider. Set to `Microsoft.SourceLink.AzureDevOps.Git` for ADO repos. |
| `DisableSourceLink` | `false` | Set to `true` to stop the SDK from adding the configured SourceLink package automatically. |
@@ -243,8 +243,8 @@ For projects where `IsPackable=true`, the SDK provides these defaults **only whe
| Property | Default | Description |
| -- | -- | -- |
| `GenerateDocumentationFile` | `true` | Emits XML documentation. |
-| `IncludeSymbols` | `true` | Produces a symbol package. |
-| `SymbolPackageFormat` | `snupkg` | Symbol package format (`symbols.nupkg` for Roslyn components). |
+| `IncludeSymbols` | `true` | Produces a symbol package (`false` for Roslyn components — their PDB ships in `analyzers/dotnet/cs/` instead). |
+| `SymbolPackageFormat` | `snupkg` | Symbol package format. Always the modern `.snupkg`; the legacy `.symbols.nupkg` is never produced by default. |
| `PublishRepositoryUrl` | `true` | Publishes the repository URL. |
| `EmbedUntrackedSources` | `true` | Embeds untracked sources for SourceLink. |
| `DebugType` | `portable` | Ensures portable PDBs for symbol-package delivery. |
diff --git a/package.json b/package.json
index d61f5b7..fa5d9d8 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,4 @@
{
"name": "changeops",
- "version": "1.0.0-prerelease.44",
- "devDependencies": {
- "@changesets/cli": "^2.31.0"
- }
+ "version": "1.0.0-prerelease.45"
}
diff --git a/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-configuration-reference/SKILL.md b/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-configuration-reference/SKILL.md
index 25e0657..7e60ecb 100644
--- a/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-configuration-reference/SKILL.md
+++ b/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-configuration-reference/SKILL.md
@@ -44,7 +44,7 @@ These are the most important configurable properties exposed by the SDK:
- `NamespacePrefix` — required unless `DisableNamespacePrefixCheck=true`
- `DisableNamespacePrefixCheck` — default `false`
- `TargetFramework` — defaults to `net10.0` when neither `TargetFramework` nor `TargetFrameworks` is set; projects explicitly declaring `IsRoslynComponent=true` default to `netstandard2.0`
-- `IsRoslynComponent` — when explicitly `true`, applies source-generator defaults: a single `netstandard2.0` target, extended analyzer rules, disabled SourceLink and untracked-source embedding, no dependency file, compiler-generated output under the framework-specific intermediate directory, `symbols.nupkg`, `PackSourceGeneratorSymbols`, telemetry exclusion, and excluded normal build output
+- `IsRoslynComponent` — when explicitly `true`, applies source-generator defaults: a single `netstandard2.0` target, `LangVersion=latest`, `Nullable=enable`, `TreatWarningsAsErrors=true`, extended analyzer rules, disabled SourceLink and untracked-source embedding, no dependency file, compiler-generated output under the framework-specific intermediate directory, telemetry exclusion, excluded normal build output, `IncludeSymbols=false` (no `.symbols.nupkg`/`.snupkg` by default — the PDB ships in `analyzers/dotnet/cs/`), and `PrivateAssets=all` applied to `Microsoft.CodeAnalysis.*` / `Microsoft.CodeAnalysis.Analyzers` references. Packable Roslyn components automatically pack the built analyzer assembly and PDB into `analyzers/dotnet/cs/`
- `PackProjectReferencedSourceGenerators` — default `true`; packable projects automatically include analyzer `ProjectReference` outputs and runtime dependencies under `analyzers/dotnet/cs/`. Set it to `false` globally or use `Pack="false"` on one analyzer reference to opt out.
- `EnableAssemblyNameGeneration` — default `true`; when `true`, `AssemblyName` and default `PackageId` follow the fully evaluated `RootNamespace`. Set `false` before the SDK import to use the standard project-name behaviour
- `DisableProjectFileNamingConventionCheck` — default `false`; disables the directory-name/file-name match validation
@@ -60,7 +60,7 @@ These are the most important configurable properties exposed by the SDK:
- `ExcludeMSTelemetryExtension` — default `false`; removes `Microsoft.Extensions.Telemetry.Abstractions`, only relevant if `ExcludePurviewTelemetry` is also `true`
- `IsPackable` — defaults to `false` if not set elsewhere
- `PackageTags`, `IncludeSource`, `IncludeSymbols`, `PublishRepositoryUrl`, `SymbolPackageFormat` — standard pack-related settings the SDK participates in for packable projects
-- Packable-project defaults (only applied when the consuming project has not supplied a value): `GenerateDocumentationFile=true`, `IncludeSymbols=true`, `SymbolPackageFormat=snupkg`, `PublishRepositoryUrl=true`, `EmbedUntrackedSources=true`, `DebugType=portable`. Portable PDBs are delivered through the `.snupkg`; the normal `.nupkg` does not receive PDB files unless the project opts in explicitly
+- Packable-project defaults (only applied when the consuming project has not supplied a value): `GenerateDocumentationFile=true`, `IncludeSymbols=true`, `SymbolPackageFormat=snupkg`, `PublishRepositoryUrl=true`, `EmbedUntrackedSources=true`, `DebugType=portable`. Portable PDBs are delivered through the `.snupkg`; the normal `.nupkg` does not receive PDB files unless the project opts in explicitly. Roslyn components default `IncludeSymbols=false` and ship their PDB inside `analyzers/dotnet/cs/` instead
- If the repo root is discoverable, the repository-root `README.md` is packed automatically (and registered via `PackageReadmeFile`) when the file exists and `PackageReadmeFile` was not configured explicitly
## Test framework settings
diff --git a/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-project-behavior-and-detection/SKILL.md b/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-project-behavior-and-detection/SKILL.md
index 23a0001..bb27583 100644
--- a/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-project-behavior-and-detection/SKILL.md
+++ b/src/src/DotNetProjectSdk/Sdk/.agents/skills/sdk-project-behavior-and-detection/SKILL.md
@@ -145,6 +145,13 @@ This is why consistent naming and placement matter so much in repos that use the
- Packs the repository-root `README.md` (registered via `PackageReadmeFile`) when the file exists and `PackageReadmeFile` is unset; skips when a README is already being packed
- Non-packable projects (including web apps) default `WarnOnPackingNonPackableProject=false` so solution-wide pack operations skip them silently
+### For Roslyn component (analyzer/source-generator) projects
+
+- Defaults a single `netstandard2.0` target, `LangVersion=latest`, `Nullable=enable`, `TreatWarningsAsErrors=true`, extended analyzer rules, disabled SourceLink, and excluded normal build output (`IncludeBuildOutput=false`)
+- Defaults `IncludeSymbols=false` — no `.symbols.nupkg` or `.snupkg` is produced by default; the analyzer PDB ships inside the main `.nupkg` under `analyzers/dotnet/cs/` beside the analyzer assembly
+- Packable Roslyn components automatically pack the built analyzer assembly (and PDB) into `analyzers/dotnet/cs/`; `SymbolPackageFormat` defaults to the modern `snupkg` if symbols are explicitly opted into
+- `Microsoft.CodeAnalysis.*` and `Microsoft.CodeAnalysis.Analyzers` references are defaulted to `PrivateAssets=all` (development-only dependencies) so they never leak into the packed nuspec
+
### For test and shared-testing projects
- Applies test-friendly `NoWarn` defaults
diff --git a/src/src/DotNetProjectSdk/Sdk/Sdk.props b/src/src/DotNetProjectSdk/Sdk/Sdk.props
index 72e4f7d..9eb9405 100644
--- a/src/src/DotNetProjectSdk/Sdk/Sdk.props
+++ b/src/src/DotNetProjectSdk/Sdk/Sdk.props
@@ -320,13 +320,19 @@
netstandard2.0
true
+
+ latest
+ enable
+ true
+
+ false
+ $(NoWarn);NU5128;
true
false
false
- symbols.nupkg
- $(TargetsForTfmSpecificDebugSymbolsInPackage);PackSourceGeneratorSymbols
true
false
@@ -615,8 +621,7 @@
true
true
true
- snupkg
+ snupkg
portable
diff --git a/src/src/DotNetProjectSdk/Sdk/Sdk.targets b/src/src/DotNetProjectSdk/Sdk/Sdk.targets
index 22547f8..dd60ab1 100644
--- a/src/src/DotNetProjectSdk/Sdk/Sdk.targets
+++ b/src/src/DotNetProjectSdk/Sdk/Sdk.targets
@@ -15,6 +15,55 @@
>$(IntermediateOutputPath)generated
+
+
+
+
+
+
+
+
+
+ all
+
+
+ all
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
+
+
+ true
+
+
+ """
+ )
+ .BuildAsync(cancellationToken);
+
+ var properties = await harness.GetPropertiesAsync(
+ cancellationToken,
+ "LangVersion",
+ "Nullable",
+ "TreatWarningsAsErrors",
+ "IncludeSymbols",
+ "NoWarn"
+ );
+
+ await Assert.That(properties["LangVersion"]).IsEqualTo("latest");
+ await Assert.That(properties["Nullable"]).IsEqualTo("enable");
+ await Assert.That(properties["TreatWarningsAsErrors"]).IsEqualTo("true");
+ await Assert
+ .That(properties["IncludeSymbols"])
+ .IsEqualTo("false")
+ .Because("Roslyn components must not produce a symbol package by default.");
+ await Assert
+ .That(properties["NoWarn"])
+ .Contains("NU5128")
+ .Because("Analyzer-only packages need NU5128 suppressed so TreatWarningsAsErrors does not fail the pack.");
+ }
+
+ [Test]
+ public async Task RoslynComponent_ExplicitCompilerDefaults_ArePreserved(CancellationToken cancellationToken)
+ {
+ using var harness = await ProjectHarness
+ .For("SourceGeneration")
+ .WithProjectFileContent(
+ """
+
+
+ true
+ 12.0
+ disable
+ false
+
+
+ """
+ )
+ .BuildAsync(cancellationToken);
+
+ var properties = await harness.GetPropertiesAsync(
+ cancellationToken,
+ "LangVersion",
+ "Nullable",
+ "TreatWarningsAsErrors"
+ );
+
+ await Assert.That(properties["LangVersion"]).IsEqualTo("12.0");
+ await Assert.That(properties["Nullable"]).IsEqualTo("disable");
+ await Assert.That(properties["TreatWarningsAsErrors"]).IsEqualTo("false");
+ }
+
+ [Test]
+ public async Task PackableRoslynComponent_Pack_AnalyzerDllAndPdb_NoLib_NoSymbolsPackage(
+ CancellationToken cancellationToken
+ )
+ {
+ using var harness = await ProjectHarness
+ .For("SourceGeneration")
+ .WithProjectFileContent(
+ """
+
+
+ true
+ true
+
+
+ """
+ )
+ .BuildAsync(cancellationToken);
+
+ var packageDirectory = Path.Combine(harness.SolutionDirectory, "packages");
+ var packageVersion = $"0.0.0-integration-test-{Guid.NewGuid():N}";
+ var (exitCode, stdOut, stdErr) = await harness.RunMSBuildAsync(
+ $"-restore -t:Pack -p:PackageOutputPath=\"{packageDirectory}\" -p:PackageVersion={packageVersion} -p:Version={packageVersion}",
+ cancellationToken
+ );
+
+ await Assert.That(exitCode).IsEqualTo(0).Because(TestHelpers.GenerateError(stdOut, stdErr));
+
+ var nupkgFiles = Directory.GetFiles(packageDirectory, "Test.SourceGeneration.*.nupkg");
+ await Assert
+ .That(nupkgFiles)
+ .HasSingleItem()
+ .Because("Only the main .nupkg must be produced; no .symbols.nupkg or .snupkg is generated by default.");
+
+ using var package = await ZipFile.OpenReadAsync(nupkgFiles[0], cancellationToken);
+ var entries = package.Entries.Select(entry => entry.FullName).ToList();
+ await Assert.That(entries).Contains("analyzers/dotnet/cs/Test.SourceGeneration.dll");
+ await Assert.That(entries).Contains("analyzers/dotnet/cs/Test.SourceGeneration.pdb");
+ await Assert
+ .That(entries.Any(entry => entry.StartsWith("lib/", StringComparison.OrdinalIgnoreCase)))
+ .IsFalse()
+ .Because("IncludeBuildOutput=false must keep the lib/ output empty.");
+ }
+
+ [Test]
+ public async Task NonPackableRoslynComponent_DoesNotPackAnalyzerAsset(CancellationToken cancellationToken)
+ {
+ using var harness = await ProjectHarness
+ .For("SourceGeneration")
+ .WithProjectFileContent(
+ """
+
+
+ true
+
+
+ """
+ )
+ .BuildAsync(cancellationToken);
+
+ var noneItems = await harness.GetItemIdentitiesAsync("None", cancellationToken);
+ await Assert
+ .That(noneItems.Any(item => item.EndsWith("Test.SourceGeneration.dll", StringComparison.OrdinalIgnoreCase)))
+ .IsFalse()
+ .Because("Only packable Roslyn components get the analyzer asset packaging.");
+ }
+
+ [Test]
+ public async Task RoslynComponent_RoslynDevDependencies_PrivateAssetsAll(CancellationToken cancellationToken)
+ {
+ using var harness = await ProjectHarness
+ .For("SourceGeneration")
+ .WithProjectFileContent(
+ """
+
+
+ true
+
+
+
+
+
+
+ """
+ )
+ .BuildAsync(cancellationToken);
+
+ var csharpPrivateAssets = await harness.GetItemMetadataValuesAsync(
+ "PackageReference",
+ "PrivateAssets",
+ "Microsoft.CodeAnalysis.CSharp",
+ cancellationToken
+ );
+ await Assert.That(csharpPrivateAssets).Contains("all");
+
+ var analyzersPrivateAssets = await harness.GetItemMetadataValuesAsync(
+ "PackageReference",
+ "PrivateAssets",
+ "Microsoft.CodeAnalysis.Analyzers",
+ cancellationToken
+ );
+ await Assert.That(analyzersPrivateAssets).Contains("all");
+
+ var analyzersIncludeAssets = await harness.GetItemMetadataValuesAsync(
+ "PackageReference",
+ "IncludeAssets",
+ "Microsoft.CodeAnalysis.Analyzers",
+ cancellationToken
+ );
+ await Assert
+ .That(analyzersIncludeAssets.Any(value => value.Contains("analyzers", StringComparison.OrdinalIgnoreCase)))
+ .IsTrue()
+ .Because("Microsoft.CodeAnalysis.Analyzers should flow as an analyzer-only development asset.");
+ }
}