From dc0d7c36256e7d29bc818e194005c56b6139d305 Mon Sep 17 00:00:00 2001 From: MohamedFasulAshab <91937523+MohamedFasulAshab@users.noreply.github.com> Date: Thu, 3 Sep 2026 12:23:31 +0530 Subject: [PATCH 1/3] Net8-crud-scaffolding-fix --- .../TextTemplatingStep.cs | 5 +++ .../net8.0/BlazorCrud/Create.Interfaces.cs | 2 +- .../net8.0/BlazorCrud/Delete.Interfaces.cs | 2 +- .../net8.0/BlazorCrud/Details.Interfaces.cs | 2 +- .../net8.0/BlazorCrud/Edit.Interfaces.cs | 2 +- .../net8.0/BlazorCrud/Index.Interfaces.cs | 2 +- .../Blazor/BlazorCrudNet8IntegrationTests.cs | 33 ++++++++----------- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs b/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs index ae0a3f7454..dcbd4be16d 100644 --- a/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs +++ b/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs @@ -96,6 +96,11 @@ public override Task ExecuteAsync(ScaffolderContext context, CancellationT } } } + else + { + _logger.LogError($"Template type '{templatingProperty.TemplateType.FullName}' does not implement '{typeof(ITextTransformation).FullName}'."); + return Task.FromResult(false); + } } _logger.LogInformation("Done\n"); diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Create.Interfaces.cs b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Create.Interfaces.cs index cdb915cc51..e984193b03 100644 --- a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Create.Interfaces.cs +++ b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Create.Interfaces.cs @@ -1,4 +1,4 @@ -using Microsoft.DotNet.Scaffolding.Shared.T4Templating; +using Microsoft.DotNet.Scaffolding.TextTemplating; namespace Microsoft.DotNet.Tools.Scaffold.AspNet.Templates.net8.BlazorCrud { diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Delete.Interfaces.cs b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Delete.Interfaces.cs index ccc16b6fab..363bde11d2 100644 --- a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Delete.Interfaces.cs +++ b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Delete.Interfaces.cs @@ -1,4 +1,4 @@ -using Microsoft.DotNet.Scaffolding.Shared.T4Templating; +using Microsoft.DotNet.Scaffolding.TextTemplating; namespace Microsoft.DotNet.Tools.Scaffold.AspNet.Templates.net8.BlazorCrud { diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Details.Interfaces.cs b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Details.Interfaces.cs index 7c10bb5582..eae995f883 100644 --- a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Details.Interfaces.cs +++ b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Details.Interfaces.cs @@ -1,4 +1,4 @@ -using Microsoft.DotNet.Scaffolding.Shared.T4Templating; +using Microsoft.DotNet.Scaffolding.TextTemplating; namespace Microsoft.DotNet.Tools.Scaffold.AspNet.Templates.net8.BlazorCrud { diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Edit.Interfaces.cs b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Edit.Interfaces.cs index e616d93b2a..d2260372f1 100644 --- a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Edit.Interfaces.cs +++ b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Edit.Interfaces.cs @@ -1,4 +1,4 @@ -using Microsoft.DotNet.Scaffolding.Shared.T4Templating; +using Microsoft.DotNet.Scaffolding.TextTemplating; namespace Microsoft.DotNet.Tools.Scaffold.AspNet.Templates.net8.BlazorCrud { diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Index.Interfaces.cs b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Index.Interfaces.cs index 983fa8351f..b8c664e6a7 100644 --- a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Index.Interfaces.cs +++ b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/BlazorCrud/Index.Interfaces.cs @@ -1,4 +1,4 @@ -using Microsoft.DotNet.Scaffolding.Shared.T4Templating; +using Microsoft.DotNet.Scaffolding.TextTemplating; namespace Microsoft.DotNet.Tools.Scaffold.AspNet.Templates.net8.BlazorCrud { diff --git a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs index de42bf1ce1..b203a48258 100644 --- a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs +++ b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs @@ -46,27 +46,22 @@ public async Task Scaffold_BlazorCrud_Net8_CliInvocation() "--page", "CRUD"); Assert.True(cliExitCode == 0, $"CLI scaffold should succeed.\nOutput: {cliOutput}\nError: {cliError}"); - // Assert — expected files were created (only if scaffolding produced output; - // the scaffolder may silently skip file generation for older TFMs if model - // resolution or template execution encounters issues) + // Assert — expected files were created var blazorPagesDir = Path.Combine(_testProjectDir, "Components", "Pages", "TestModelPages"); - bool scaffoldingProducedFiles = Directory.Exists(blazorPagesDir); - if (scaffoldingProducedFiles) + Assert.True(Directory.Exists(blazorPagesDir), $"Blazor pages directory '{blazorPagesDir}' should be created."); + foreach (var page in new[] { "Create.razor", "Delete.razor", "Details.razor", "Edit.razor", "Index.razor" }) { - foreach (var page in new[] { "Create.razor", "Delete.razor", "Details.razor", "Edit.razor", "Index.razor" }) - { - Assert.True(File.Exists(Path.Combine(blazorPagesDir, page)), $"Blazor page '{page}' should be created."); - } - Assert.True(File.Exists(Path.Combine(_testProjectDir, "Data", "TestDbContext.cs")), - "DbContext file 'Data/TestDbContext.cs' should be created."); - var programContent = File.ReadAllText(Path.Combine(_testProjectDir, "Program.cs")); - Assert.Contains("TestDbContext", programContent); - - // Assert — no NuGet errors and project builds after scaffolding - Assert.False(cliOutput.Contains("error: NU"), - $"Scaffolding should not produce NuGet errors for {TargetFramework}.\nOutput: {cliOutput}"); - var (afterExitCode, _, afterError) = await RunBuildAsync(_testProjectDir); - Assert.True(afterExitCode == 0, $"Project should still build after scaffolding. Error: {afterError}"); + Assert.True(File.Exists(Path.Combine(blazorPagesDir, page)), $"Blazor page '{page}' should be created."); } + Assert.True(File.Exists(Path.Combine(_testProjectDir, "Data", "TestDbContext.cs")), + "DbContext file 'Data/TestDbContext.cs' should be created."); + var programContent = File.ReadAllText(Path.Combine(_testProjectDir, "Program.cs")); + Assert.Contains("TestDbContext", programContent); + + // Assert — no NuGet errors and project builds after scaffolding + Assert.False(cliOutput.Contains("error: NU"), + $"Scaffolding should not produce NuGet errors for {TargetFramework}.\nOutput: {cliOutput}"); + var (afterExitCode, _, afterError) = await RunBuildAsync(_testProjectDir); + Assert.True(afterExitCode == 0, $"Project should still build after scaffolding. Error: {afterError}"); } } From 49e9901a69ecfead2a820933d41d3aed2f6a554c Mon Sep 17 00:00:00 2001 From: MohamedFasulAshab <91937523+MohamedFasulAshab@users.noreply.github.com> Date: Tue, 8 Sep 2026 12:55:00 +0530 Subject: [PATCH 2/3] review-concerns-addressed --- .../TextTemplatingStep.cs | 5 ----- .../blazorWebCrudChanges.json | Bin 3092 -> 4678 bytes .../Blazor/BlazorCrudNet8IntegrationTests.cs | 3 ++- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs b/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs index dcbd4be16d..ae0a3f7454 100644 --- a/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs +++ b/src/dotnet-scaffolding/Microsoft.DotNet.Scaffolding.TextTemplating/TextTemplatingStep.cs @@ -96,11 +96,6 @@ public override Task ExecuteAsync(ScaffolderContext context, CancellationT } } } - else - { - _logger.LogError($"Template type '{templatingProperty.TemplateType.FullName}' does not implement '{typeof(ITextTransformation).FullName}'."); - return Task.FromResult(false); - } } _logger.LogInformation("Done\n"); diff --git a/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/CodeModificationConfigs/blazorWebCrudChanges.json b/src/dotnet-scaffolding/dotnet-scaffold/AspNet/Templates/net8.0/CodeModificationConfigs/blazorWebCrudChanges.json index 1238556d4f511bb78d6f70de825bfc2ef4d43b05..a6eef9966f623aadd382d4d02f965bed1ad125f3 100644 GIT binary patch delta 800 zcmcIi%}N4c6g^`(N)r)65EL{_hPiPW6lp?<1eKYzlOTUG!Dd3O#EtX@)@|i8L=Zke zt6I0{fjZwfXhAN5Vwkyi=H7e0bIzTI`L}SlZDeqXCaQ2?%bl?_m%MIX zOUlObb6eNsC=iw@V=-I66)QEA*jGmk+iISZRa981bJD|PEzO>$*I_d+4r@7P>I54V z$p%*BT?=*ce7kl}Hrc6A$Iie+ocEt{=_oQ-MIIKyj00igDIAdM1w}>Oi74r8@iHmw zoYEZJFjvzm?lM!-YLr}pGG3WCvMPlZI?DOsMm!=vkucF1xkvEGFX={HVh%A(?#I>5KpZwFR`4edcd6`(3M{Ui`(v?kD!VVWY5Zt5{EfO4goS-4j7ke5c zA4h`E?_Xms(lIS6L*eZ+s*O057?n)mRStu*($%Ns$$u|BEhI@}rms(K`1(C<&(}}t GAO25fVxw9B delta 37 vcmV+=0NVe?B$ODCda>LF0h1mL9Fxum5VJT6Is&uI2U-G?zzROIund+31k(*a diff --git a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs index b203a48258..1642b41f14 100644 --- a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs +++ b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs @@ -56,7 +56,8 @@ public async Task Scaffold_BlazorCrud_Net8_CliInvocation() Assert.True(File.Exists(Path.Combine(_testProjectDir, "Data", "TestDbContext.cs")), "DbContext file 'Data/TestDbContext.cs' should be created."); var programContent = File.ReadAllText(Path.Combine(_testProjectDir, "Program.cs")); - Assert.Contains("TestDbContext", programContent); + Assert.Contains("builder.Configuration.GetConnectionString", programContent); + Assert.Contains("builder.Services.AddDbContextFactory", programContent); // Assert — no NuGet errors and project builds after scaffolding Assert.False(cliOutput.Contains("error: NU"), From 9fae360b27ad2f94d3527149b085f5181e30e471 Mon Sep 17 00:00:00 2001 From: MohamedFasulAshab <91937523+MohamedFasulAshab@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:29:56 +0530 Subject: [PATCH 3/3] merge-conflict-review-fix --- .../Blazor/BlazorCrudNet8IntegrationTests.cs | 28 ++++--------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs index dcdfd14b2c..2259e91ac0 100644 --- a/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs +++ b/test/dotnet-scaffolding/dotnet-scaffold.Tests/AspNet/Integration/Blazor/BlazorCrudNet8IntegrationTests.cs @@ -65,34 +65,18 @@ public enum EmploymentType Assert.True(Directory.Exists(blazorPagesDir), $"Blazor pages directory '{blazorPagesDir}' should be created."); foreach (var page in new[] { "Create.razor", "Delete.razor", "Details.razor", "Edit.razor", "Index.razor" }) { - foreach (var page in new[] { "Create.razor", "Delete.razor", "Details.razor", "Edit.razor", "Index.razor" }) - { - Assert.True(File.Exists(Path.Combine(blazorPagesDir, page)), $"Blazor page '{page}' should be created."); - } - - var editContent = File.ReadAllText(Path.Combine(blazorPagesDir, "Edit.razor")); - Assert.Contains("ApplicationState.TryTakeFromJson(nameof(TestModel), out var restoredTestModel)", editContent); - Assert.Contains("TestModel = restoredTestModel", editContent); - Assert.Contains("ApplicationState.PersistAsJson(nameof(TestModel), TestModel)", editContent); - - var createContent = File.ReadAllText(Path.Combine(blazorPagesDir, "Create.razor")); - Assert.Contains("(nameof(TestModel), out var restoredTestModel)", editContent); Assert.Contains("TestModel = restoredTestModel", editContent); Assert.Contains("ApplicationState.PersistAsJson(nameof(TestModel), TestModel)", editContent); + + var createContent = File.ReadAllText(Path.Combine(blazorPagesDir, "Create.razor")); + Assert.Contains("