Add centralized MES version validation with declarative attribute support #593
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR introduces a centralized MES version validation system that eliminates repetitive version check code from individual commands. Instead of manually validating MES versions in each command's execute method, commands can now declaratively specify their minimum required MES version using the
MinimumMESVersionproperty on theCmfCommandattribute.Problem
Previously, commands requiring a minimum MES version had to implement manual validation logic:
This approach had several drawbacks:
Solution
Commands can now declaratively specify minimum MES version requirements:
The validation happens automatically before command execution, providing consistent error messages to users:
Implementation Details
Core Components
MESVersionValidationService (
core/Objects/MESVersionValidationService.cs)IMESVersionValidationServicewith validation methodsMESVersionValidationExceptionfor clear error handlingCmfCommandAttribute Enhancement (
core/Attributes/CmfCommandAttribute.cs)MinimumMESVersionproperty (string)Automatic Validation Integration (
core/Commands/BaseCommand.cs)FindChildCommands()to automatically add validators whenMinimumMESVersionis specifiedService Registration (
core/StartupModule.cs)IMESVersionValidationServicein the DI containerCommands Migrated
Five IoT commands have been migrated from manual to declarative validation:
GenerateTaskLibraryCommand- requires MES 11.0.0+GenerateConverterCommand- requires MES 11.0.0+GenerateBusinessScenarioCommand- requires MES 11.1.0+GenerateDotnetFrameworkDriverCommand- requires MES 11.0.0+GenerateDriverCommand- requires MES 11.0.0+Testing
Comprehensive test coverage ensures reliability:
17 unit tests (
tests/Specs/MESVersionValidation.cs)2 integration tests (
tests/Specs/MESVersionCommandValidation.cs)All 19 tests passing ✅
Documentation
Complete documentation provided in
docs/MES-Version-Validation.md:Benefits
Backward Compatibility
✅ 100% Backward Compatible
MinimumMESVersionwork exactly as beforeUsage for Future Commands
To add version requirements to new commands:
Files Changed
Fixes #[issue-number]
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
0t3vsblobprodcus362.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)1javsblobprodcus364.vsblob.vsassets.io1k9vsblobprodcus379.vsblob.vsassets.io1p7vsblobprodcus324.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)1s1vsblobprodcus386.vsblob.vsassets.io2zrvsblobprodcus388.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)37bvsblobprodcus311.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)4m6vsblobprodcus384.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)4vyvsblobprodcus361.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)4zjvsblobprodcus390.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)51yvsblobprodcus36.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)5rqvsblobprodcus385.vsblob.vsassets.io7k6vsblobprodcus337.vsblob.vsassets.io80zvsblobprodcus35.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)96bvsblobprodcus338.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)bcnvsblobprodcus378.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)c50vsblobprodcus330.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)c78vsblobprodcus322.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)cmf-nugetnpm install(dns block)d0svsblobprodcus381.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)frdvsblobprodcus327.vsblob.vsassets.io/home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps /home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js(dns block)gbsvsblobprodcus365.vsblob.vsassets.iogervsblobprodcus329.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)h6tvsblobprodcus346.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)i1qvsblobprodcus353.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)jd4vsblobprodcus366.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)josvsblobprodcus372.vsblob.vsassets.iojrqvsblobprodcus343.vsblob.vsassets.iokgfvsblobprodcus314.vsblob.vsassets.iokh4vsblobprodcus325.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)kijvsblobprodcus387.vsblob.vsassets.iokmuvsblobprodcus389.vsblob.vsassets.iokxqvsblobprodcus376.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)l49vsblobprodcus358.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)ljcvsblobprodcus317.vsblob.vsassets.iom16vsblobprodcus374.vsblob.vsassets.iom8dvsblobprodcus37.vsblob.vsassets.iomfjvsblobprodcus373.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)nn8vsblobprodcus340.vsblob.vsassets.ioofvvsblobprodcus315.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)p2ovsblobprodcus312.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)pc2vsblobprodcus360.vsblob.vsassets.iope3vsblobprodcus354.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)pe4vsblobprodcus351.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)pkvvsblobprodcus321.vsblob.vsassets.iorcxvsblobprodcus328.vsblob.vsassets.ios4uvsblobprodcus326.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)s8mvsblobprodcus38.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)se1vsblobprodcus349.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)tphvsblobprodcus375.vsblob.vsassets.ioukkvsblobprodcus352.vsblob.vsassets.iouy6vsblobprodcus34.vsblob.vsassets.iodotnet build cmf-cli.sln(dns block)v53vsblobprodcus320.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)vb4vsblobprodcus33.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)vwvvsblobprodcus334.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)x3yvsblobprodcus370.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)xupvsblobprodcus332.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)yluvsblobprodcus367.vsblob.vsassets.ioytvvsblobprodcus310.vsblob.vsassets.io/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/tests/bin/Debug/net8.0/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/bin/Debug/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/.dotnet/dotnet restore --no-dependencies /home/REDACTED/work/cli/cli/cmf-cli/resources/template_feed/iot/driver-dotnet-framework/src/%directoryname%/dotnet/Cmf.Connect.IoT.Driver.%driveridentifier%/Cmf.Connect.IoT.Driver.%driveridentifier%.csproj --packages /home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/packages /p:DisableImplicitNuGetFallbackFolder=true --verbosity normal /p:TargetFrameworkRootPath=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot /p:NetCoreTargetingPackRoot=/home/REDACTED/work/cli/.codeql-scratch/dbs/csharp/working/emptyFakeDotnetRoot(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
Fixes #504
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.