Skip to content

chore: add projects for CLI introspection - #5

Draft
Flash0ver wants to merge 11 commits into
mainfrom
chore/code-cli-introspection
Draft

chore: add projects for CLI introspection#5
Flash0ver wants to merge 11 commits into
mainfrom
chore/code-cli-introspection

Conversation

@Flash0ver

Copy link
Copy Markdown
Member

Summary

Add .NET projects for CLI introspection (see #3 and #4)

Remarks

TODO


closes: #2

@Flash0ver Flash0ver added this to the 0.1.0 milestone Aug 13, 2026
@Flash0ver
Flash0ver requested a lite review from Copilot August 13, 2026 14:19
@Flash0ver Flash0ver self-assigned this Aug 13, 2026
@Flash0ver Flash0ver added changelog:none No consumer observable changes (no SemVer increment) type:chore Update packages/dependencies that don't impact published artifacts scope:code .NET, MSBuild and C# maintenance tasks labels Aug 13, 2026

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR scaffolds the solution structure needed for upcoming CLI introspection work by adding new library, example, benchmark, and test projects, and wiring them into the solution/build.

Changes:

  • Added new library projects for CLI Schema and OpenCLI introspection scaffolding.
  • Added example apps (C#, F#, Visual Basic), a BenchmarkDotNet benchmarks project, and an MSTest test project.
  • Updated solution and repo-wide build/package configuration to support the new projects.

Reviewed changes

Copilot reviewed 29 out of 29 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
source/tests/FlashOWare.CommandLine.Introspection.Tests/Properties/AssemblyInfo.cs Adds MSTest parallelization setting for tests.
source/tests/FlashOWare.CommandLine.Introspection.Tests/FlashOWare.CommandLine.Introspection.Tests.csproj Introduces MSTest-based test project referencing new libs.
source/tests/Directory.Build.props Sets test-project defaults and shared usings under /tests.
source/tests/.globalconfig Configures analyzer severities for test projects.
source/perf/FlashOWare.CommandLine.Introspection.Benchmarks/Properties/AssemblyInfo.cs Adds assembly metadata for benchmarks project.
source/perf/FlashOWare.CommandLine.Introspection.Benchmarks/Program.cs Adds BenchmarkDotNet entrypoint with custom config.
source/perf/FlashOWare.CommandLine.Introspection.Benchmarks/FlashOWare.CommandLine.Introspection.Benchmarks.csproj Adds benchmark project referencing new libs.
source/perf/Directory.Build.props Sets shared build defaults under /perf.
source/perf/.globalconfig Configures analyzer severities for perf projects.
source/lib/FlashOWare.CommandLine.Introspection.OpenCli/Properties/AssemblyInfo.cs Adds CLS compliance metadata for OpenCLI library.
source/lib/FlashOWare.CommandLine.Introspection.OpenCli/FlashOWare.CommandLine.Introspection.OpenCli.csproj Adds OpenCLI library project.
source/lib/FlashOWare.CommandLine.Introspection.CliSchema/Properties/AssemblyInfo.cs Adds CLS compliance metadata for CLI Schema library.
source/lib/FlashOWare.CommandLine.Introspection.CliSchema/FlashOWare.CommandLine.Introspection.CliSchema.csproj Adds CLI Schema library project.
source/lib/Directory.Build.props Adds pack/doc/trim/AOT-related defaults for libraries.
source/lib/.globalconfig Enables global config under /lib.
source/FlashOWare.CommandLine.slnx Adds new projects/files to the solution structure.
source/examples/FlashOWare.CommandLine.Example.VisualBasic/Properties/GlobalSuppressions.vb Adds demo-specific suppression.
source/examples/FlashOWare.CommandLine.Example.VisualBasic/Properties/AssemblyInfo.vb Adds assembly metadata for VB example.
source/examples/FlashOWare.CommandLine.Example.VisualBasic/Program.vb Adds VB demo app using System.CommandLine + Octokit.
source/examples/FlashOWare.CommandLine.Example.VisualBasic/FlashOWare.CommandLine.Example.VisualBasic.vbproj Adds VB example project and references.
source/examples/FlashOWare.CommandLine.Example.FSharp/Program.fs Adds F# demo app using System.CommandLine + Octokit.
source/examples/FlashOWare.CommandLine.Example.FSharp/FlashOWare.CommandLine.Example.FSharp.fsproj Adds F# example project and references.
source/examples/FlashOWare.CommandLine.Example.CSharp/Properties/AssemblyInfo.cs Adds assembly metadata for C# example.
source/examples/FlashOWare.CommandLine.Example.CSharp/Program.cs Adds C# demo app using System.CommandLine + Octokit.
source/examples/FlashOWare.CommandLine.Example.CSharp/FlashOWare.CommandLine.Example.CSharp.csproj Adds C# example project and references.
source/examples/Directory.Build.props Enables trimming/AOT defaults for example apps.
source/examples/.globalconfig Example-specific analyzer configuration.
source/Directory.Packages.props Adds central package versions for new dependencies.
source/Directory.Build.props Extends repo-wide language version and build/analyzer settings.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@@ -0,0 +1 @@
[assembly: Parallelize(Scope = ExecutionScope.MethodLevel)]

@Flash0ver Flash0ver Aug 13, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong!
The SDK in use for this Project is MSTest.Sdk, which already comes with:

<ItemGroup>
  <Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
</ItemGroup>

You only did a syntactic check of this document,
but with .NET and C#, you need to do semantic checks of the compilation.

Comment on lines +5 to +6
<AssemblyName>FlashOWare.CommandLine.Introspection.Tests</AssemblyName>
<RootNamespace>FlashOWare.CommandLine.Tests</RootNamespace>

@Flash0ver Flash0ver Aug 13, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No!
This is a conscious structural decision:

This single Test-Project will include tests for more than one library.
So there will be an appropriate Introspection folder/namespace added once features are added to the libraries and respective tests are added here.

However, I might change my mind here, see:

When applying this change, there will be two test projects instead, one per library project.

Comment on lines +3 to +4
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>

@Flash0ver Flash0ver Aug 13, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

False!
Although this Pull Request does indeed close #2,
#2 does not call out "multi-targeting" whatsoever.

Comment on lines +20 to +23
<!-- The IsAotCompatible assembly metadata was introduced in .NET 10.0: [assembly: AssemblyMetadata("IsAotCompatible", "True")] -->
<PropertyGroup>
<IsAotCompatible Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">true</IsAotCompatible>
<VerifyReferenceAotCompatibility Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net10.0'))">true</VerifyReferenceAotCompatibility>

@Flash0ver Flash0ver Aug 13, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorrect!
The IsAotCompatible metadata is indeed emitted since net10.0.
But Native AOT deployment is already supported since net7.0, and net8.0 adds AOT analysis warnings.

See documentation:

https://learn.microsoft.com/dotnet/core/deploying/native-aot#target-framework-requirements
When preparing libraries for AOT compatibility, target the latest supported TFM. This helps you benefit from the latest analyzer improvements. At a minimum, target net8.0 or later. This version is required for AOT analysis warnings.

Therefore can we only VerifyReferenceAotCompatibility since net10.0.

</PropertyGroup>

<PropertyGroup>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>

@Flash0ver Flash0ver Aug 13, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>FlashOWare.CommandLine.Introspection.CliSchema</AssemblyName>

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Consider removing ".Introspection." from the project/assembly/package name.

<PropertyGroup>
<OutputType>Library</OutputType>
<TargetFramework>net10.0</TargetFramework>
<AssemblyName>FlashOWare.CommandLine.Introspection.OpenCli</AssemblyName>

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: Consider removing ".Introspection." from the project/assembly/package name.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog:none No consumer observable changes (no SemVer increment) scope:code .NET, MSBuild and C# maintenance tasks type:chore Update packages/dependencies that don't impact published artifacts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Initial scaffolding for CLI introspection

2 participants