RSCG – SG4MVC
 
 
| name | SG4MVC | 
| nuget | https://www.nuget.org/packages/SG4MVC/ | 
| link | https://github.com/SG4MVC/SG4MVC | 
| author | Mark Flanagan | 
Generate strong typed HTML helpers for ASP.NET MVC projects.
This is how you can use SG4MVC .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="SG4MVC" Version="0.9.4-beta" />
  </ItemGroup>
	<ItemGroup>
		<AssemblyAttribute Include="Sg4Mvc.GenerateSg4Mvc" />
	</ItemGroup>
	<PropertyGroup>
		<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
		<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
	</PropertyGroup>
</Project>
The code that you will use is
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
//app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}")
    .WithStaticAssets();
app.Run();
The code that is generated is
// <auto-generated />
// This file was generated by SG4MVC.
// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance
// 0108: suppress "Foo hides inherited member Foo.Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed
#pragma warning disable 1591, 3008, 3009, 0108, CS8981
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Routing;
using Sg4Mvc.ActionResults;
using Sg4Mvc;
[GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
public static partial class MVC
{
    public static readonly MVCDemo.Controllers.HomeController Home = new MVCDemo.Controllers.Sg4Mvc_HomeController();
    public static readonly Sg4Mvc.SharedController Shared = new Sg4Mvc.SharedController();
}
#pragma warning restore 1591, 3008, 3009, 0108, CS8981
// <auto-generated />
// This file was generated by SG4MVC.
// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance
// 0108: suppress "Foo hides inherited member Foo.Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed
#pragma warning disable 1591, 3008, 3009, 0108, CS8981
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Routing;
using Sg4Mvc.ActionResults;
using Sg4Mvc;
namespace MVCDemo.Controllers
{
    public partial class HomeController
    {
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected HomeController(Dummy d)
        {
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToAction(IActionResult result)
        {
            var callInfo = result.GetSg4ActionResult();
            return RedirectToRoute(callInfo.RouteValueDictionary);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToAction(Task<IActionResult> taskResult)
        {
            return RedirectToAction(taskResult.Result);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToActionPermanent(IActionResult result)
        {
            var callInfo = result.GetSg4ActionResult();
            return RedirectToRoutePermanent(callInfo.RouteValueDictionary);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToActionPermanent(Task<IActionResult> taskResult)
        {
            return RedirectToActionPermanent(taskResult.Result);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToPage(IActionResult result)
        {
            var callInfo = result.GetSg4ActionResult();
            return RedirectToRoute(callInfo.RouteValueDictionary);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToPage(Task<IActionResult> taskResult)
        {
            return RedirectToPage(taskResult.Result);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToPagePermanent(IActionResult result)
        {
            var callInfo = result.GetSg4ActionResult();
            return RedirectToRoutePermanent(callInfo.RouteValueDictionary);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        protected RedirectToRouteResult RedirectToPagePermanent(Task<IActionResult> taskResult)
        {
            return RedirectToPagePermanent(taskResult.Result);
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public HomeController Actions => MVC.Home;
        [GeneratedCode("Sg4Mvc", "1.0")]
        public readonly string Area = "";
        [GeneratedCode("Sg4Mvc", "1.0")]
        public readonly string Name = "Home";
        [GeneratedCode("Sg4Mvc", "1.0")]
        public const string NameConst = "Home";
        [GeneratedCode("Sg4Mvc", "1.0")]
        static readonly ActionNamesClass s_ActionNames = new ActionNamesClass();
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public ActionNamesClass ActionNames => s_ActionNames;
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public class ActionNamesClass
        {
            public readonly string Index = "Index";
            public readonly string Privacy = "Privacy";
            public readonly string Error = "Error";
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public class ActionNameConstants
        {
            public const string Index = "Index";
            public const string Privacy = "Privacy";
            public const string Error = "Error";
        }
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public class ViewsClass
        {
            static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass();
            public _ViewNamesClass ViewNames => s_ViewNames;
            public class _ViewNamesClass
            {
                public readonly string Index = "Index";
                public readonly string Privacy = "Privacy";
            }
            public readonly string Index = "~/Views/Home/Index.cshtml";
            public readonly string Privacy = "~/Views/Home/Privacy.cshtml";
        }
        [GeneratedCode("Sg4Mvc", "1.0")]
        static readonly ViewsClass s_Views = new ViewsClass();
        [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
        public ViewsClass Views => s_Views;
    }
    [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
    public partial class Sg4Mvc_HomeController : MVCDemo.Controllers.HomeController
    {
        public Sg4Mvc_HomeController() : base(Dummy.Instance)
        {
        }
        [NonAction]
        partial void IndexOverride(Sg4Mvc_Mvc_ActionResult callInfo);
        [NonAction]
        public override Microsoft.AspNetCore.Mvc.IActionResult Index()
        {
            var callInfo = new Sg4Mvc_Mvc_ActionResult(Area, Name, ActionNames.Index);
            IndexOverride(callInfo);
            return callInfo;
        }
        [NonAction]
        partial void PrivacyOverride(Sg4Mvc_Mvc_ActionResult callInfo);
        [NonAction]
        public override Microsoft.AspNetCore.Mvc.IActionResult Privacy()
        {
            var callInfo = new Sg4Mvc_Mvc_ActionResult(Area, Name, ActionNames.Privacy);
            PrivacyOverride(callInfo);
            return callInfo;
        }
        [NonAction]
        partial void ErrorOverride(Sg4Mvc_Mvc_ActionResult callInfo);
        [NonAction]
        public override Microsoft.AspNetCore.Mvc.IActionResult Error()
        {
            var callInfo = new Sg4Mvc_Mvc_ActionResult(Area, Name, ActionNames.Error);
            ErrorOverride(callInfo);
            return callInfo;
        }
    }
}
#pragma warning restore 1591, 3008, 3009, 0108, CS8981
// <auto-generated />
// This file was generated by SG4MVC.
// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance
// 0108: suppress "Foo hides inherited member Foo.Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed
#pragma warning disable 1591, 3008, 3009, 0108, CS8981
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Routing;
using Sg4Mvc.ActionResults;
using Sg4Mvc;
[GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
public static partial class MVCPages
{
}
#pragma warning restore 1591, 3008, 3009, 0108, CS8981
// <auto-generated />
// This file was generated by SG4MVC.
// Make sure the compiler doesn't complain about missing Xml comments and CLS compliance
// 0108: suppress "Foo hides inherited member Foo.Use the new keyword if hiding was intended." when a controller and its abstract parent are both processed
#pragma warning disable 1591, 3008, 3009, 0108, CS8981
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Routing;
using Sg4Mvc.ActionResults;
using Sg4Mvc;
namespace Sg4Mvc
{
    [GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
    public partial class SharedController
    {
        public class ViewsClass
        {
            static readonly _ViewNamesClass s_ViewNames = new _ViewNamesClass();
            public _ViewNamesClass ViewNames => s_ViewNames;
            public class _ViewNamesClass
            {
                public readonly string Error = "Error";
                public readonly string _Layout = "_Layout";
                public readonly string _ValidationScriptsPartial = "_ValidationScriptsPartial";
            }
            public readonly string Error = "~/Views/Shared/Error.cshtml";
            public readonly string _Layout = "~/Views/Shared/_Layout.cshtml";
            public readonly string _ValidationScriptsPartial = "~/Views/Shared/_ValidationScriptsPartial.cshtml";
        }
        static readonly ViewsClass s_Views = new ViewsClass();
        public ViewsClass Views => s_Views;
    }
}
[GeneratedCode("Sg4Mvc", "1.0"), DebuggerNonUserCode]
public static partial class Links
{
    public const string UrlPath = "~";
    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
    public static partial class css
    {
        public const string UrlPath = "~/css";
        public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
        public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
        public static readonly string site_css = Url("site.css");
    }
    public static partial class js
    {
        public const string UrlPath = "~/js";
        public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
        public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
        public static readonly string site_js = Url("site.js");
    }
    public static partial class lib
    {
        public const string UrlPath = "~/lib";
        public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
        public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
        public static partial class bootstrap
        {
            public const string UrlPath = "~/lib/bootstrap";
            public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
            public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
            public static partial class dist
            {
                public const string UrlPath = "~/lib/bootstrap/dist";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static partial class css
                {
                    public const string UrlPath = "~/lib/bootstrap/dist/css";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static readonly string bootstrap_grid_css = Url("bootstrap-grid.css");
                    public static readonly string bootstrap_grid_css_map = Url("bootstrap-grid.css.map");
                    public static readonly string bootstrap_grid_min_css = Url("bootstrap-grid.min.css");
                    public static readonly string bootstrap_grid_min_css_map = Url("bootstrap-grid.min.css.map");
                    public static readonly string bootstrap_grid_rtl_css = Url("bootstrap-grid.rtl.css");
                    public static readonly string bootstrap_grid_rtl_css_map = Url("bootstrap-grid.rtl.css.map");
                    public static readonly string bootstrap_grid_rtl_min_css = Url("bootstrap-grid.rtl.min.css");
                    public static readonly string bootstrap_grid_rtl_min_css_map = Url("bootstrap-grid.rtl.min.css.map");
                    public static readonly string bootstrap_reboot_css = Url("bootstrap-reboot.css");
                    public static readonly string bootstrap_reboot_css_map = Url("bootstrap-reboot.css.map");
                    public static readonly string bootstrap_reboot_min_css = Url("bootstrap-reboot.min.css");
                    public static readonly string bootstrap_reboot_min_css_map = Url("bootstrap-reboot.min.css.map");
                    public static readonly string bootstrap_reboot_rtl_css = Url("bootstrap-reboot.rtl.css");
                    public static readonly string bootstrap_reboot_rtl_css_map = Url("bootstrap-reboot.rtl.css.map");
                    public static readonly string bootstrap_reboot_rtl_min_css = Url("bootstrap-reboot.rtl.min.css");
                    public static readonly string bootstrap_reboot_rtl_min_css_map = Url("bootstrap-reboot.rtl.min.css.map");
                    public static readonly string bootstrap_utilities_css = Url("bootstrap-utilities.css");
                    public static readonly string bootstrap_utilities_css_map = Url("bootstrap-utilities.css.map");
                    public static readonly string bootstrap_utilities_min_css = Url("bootstrap-utilities.min.css");
                    public static readonly string bootstrap_utilities_min_css_map = Url("bootstrap-utilities.min.css.map");
                    public static readonly string bootstrap_utilities_rtl_css = Url("bootstrap-utilities.rtl.css");
                    public static readonly string bootstrap_utilities_rtl_css_map = Url("bootstrap-utilities.rtl.css.map");
                    public static readonly string bootstrap_utilities_rtl_min_css = Url("bootstrap-utilities.rtl.min.css");
                    public static readonly string bootstrap_utilities_rtl_min_css_map = Url("bootstrap-utilities.rtl.min.css.map");
                    public static readonly string bootstrap_css = Url("bootstrap.css");
                    public static readonly string bootstrap_css_map = Url("bootstrap.css.map");
                    public static readonly string bootstrap_min_css = Url("bootstrap.min.css");
                    public static readonly string bootstrap_min_css_map = Url("bootstrap.min.css.map");
                    public static readonly string bootstrap_rtl_css = Url("bootstrap.rtl.css");
                    public static readonly string bootstrap_rtl_css_map = Url("bootstrap.rtl.css.map");
                    public static readonly string bootstrap_rtl_min_css = Url("bootstrap.rtl.min.css");
                    public static readonly string bootstrap_rtl_min_css_map = Url("bootstrap.rtl.min.css.map");
                }
                public static partial class js
                {
                    public const string UrlPath = "~/lib/bootstrap/dist/js";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static readonly string bootstrap_bundle_js = Url("bootstrap.bundle.js");
                    public static readonly string bootstrap_bundle_js_map = Url("bootstrap.bundle.js.map");
                    public static readonly string bootstrap_bundle_min_js = Url("bootstrap.bundle.min.js");
                    public static readonly string bootstrap_bundle_min_js_map = Url("bootstrap.bundle.min.js.map");
                    public static readonly string bootstrap_esm_js = Url("bootstrap.esm.js");
                    public static readonly string bootstrap_esm_js_map = Url("bootstrap.esm.js.map");
                    public static readonly string bootstrap_esm_min_js = Url("bootstrap.esm.min.js");
                    public static readonly string bootstrap_esm_min_js_map = Url("bootstrap.esm.min.js.map");
                    public static readonly string bootstrap_js = Url("bootstrap.js");
                    public static readonly string bootstrap_js_map = Url("bootstrap.js.map");
                    public static readonly string bootstrap_min_js = Url("bootstrap.min.js");
                    public static readonly string bootstrap_min_js_map = Url("bootstrap.min.js.map");
                }
            }
            public static readonly string LICENSE = Url("LICENSE");
        }
        public static partial class jquery
        {
            public const string UrlPath = "~/lib/jquery";
            public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
            public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
            public static partial class dist
            {
                public const string UrlPath = "~/lib/jquery/dist";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static readonly string jquery_js = Url("jquery.js");
                public static readonly string jquery_min_js = Url("jquery.min.js");
                public static readonly string jquery_min_map = Url("jquery.min.map");
                public static readonly string jquery_slim_js = Url("jquery.slim.js");
                public static readonly string jquery_slim_min_js = Url("jquery.slim.min.js");
                public static readonly string jquery_slim_min_map = Url("jquery.slim.min.map");
            }
            public static partial class validation
            {
                public const string UrlPath = "~/lib/jquery-validation";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static partial class dist
                {
                    public const string UrlPath = "~/lib/jquery-validation/dist";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static readonly string additional_methods_js = Url("additional-methods.js");
                    public static readonly string additional_methods_min_js = Url("additional-methods.min.js");
                    public static readonly string jquery_validate_js = Url("jquery.validate.js");
                    public static readonly string jquery_validate_min_js = Url("jquery.validate.min.js");
                }
                public static partial class unobtrusive
                {
                    public const string UrlPath = "~/lib/jquery-validation-unobtrusive";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static partial class dist
                    {
                        public const string UrlPath = "~/lib/jquery-validation-unobtrusive/dist";
                        public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                        public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                        public static readonly string jquery_validate_unobtrusive_js = Url("jquery.validate.unobtrusive.js");
                        public static readonly string jquery_validate_unobtrusive_min_js = Url("jquery.validate.unobtrusive.min.js");
                    }
                    public static readonly string LICENSE_txt = Url("LICENSE.txt");
                }
                public static readonly string LICENSE_md = Url("LICENSE.md");
            }
            public static partial class validation_unobtrusive
            {
                public const string UrlPath = "~/lib/jquery-validation-unobtrusive";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static partial class dist
                {
                    public const string UrlPath = "~/lib/jquery-validation-unobtrusive/dist";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static readonly string jquery_validate_unobtrusive_js = Url("jquery.validate.unobtrusive.js");
                    public static readonly string jquery_validate_unobtrusive_min_js = Url("jquery.validate.unobtrusive.min.js");
                }
                public static readonly string LICENSE_txt = Url("LICENSE.txt");
            }
            public static readonly string LICENSE_txt = Url("LICENSE.txt");
        }
        public static partial class jquery_validation
        {
            public const string UrlPath = "~/lib/jquery-validation";
            public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
            public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
            public static partial class dist
            {
                public const string UrlPath = "~/lib/jquery-validation/dist";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static readonly string additional_methods_js = Url("additional-methods.js");
                public static readonly string additional_methods_min_js = Url("additional-methods.min.js");
                public static readonly string jquery_validate_js = Url("jquery.validate.js");
                public static readonly string jquery_validate_min_js = Url("jquery.validate.min.js");
            }
            public static partial class unobtrusive
            {
                public const string UrlPath = "~/lib/jquery-validation-unobtrusive";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static partial class dist
                {
                    public const string UrlPath = "~/lib/jquery-validation-unobtrusive/dist";
                    public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                    public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                    public static readonly string jquery_validate_unobtrusive_js = Url("jquery.validate.unobtrusive.js");
                    public static readonly string jquery_validate_unobtrusive_min_js = Url("jquery.validate.unobtrusive.min.js");
                }
                public static readonly string LICENSE_txt = Url("LICENSE.txt");
            }
            public static readonly string LICENSE_md = Url("LICENSE.md");
        }
        public static partial class jquery_validation_unobtrusive
        {
            public const string UrlPath = "~/lib/jquery-validation-unobtrusive";
            public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
            public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
            public static partial class dist
            {
                public const string UrlPath = "~/lib/jquery-validation-unobtrusive/dist";
                public static string Url() => Sg4MvcHelpers.ProcessVirtualPath(UrlPath);
                public static string Url(string fileName) => Sg4MvcHelpers.ProcessVirtualPath(UrlPath + "/" + fileName);
                public static readonly string jquery_validate_unobtrusive_js = Url("jquery.validate.unobtrusive.js");
                public static readonly string jquery_validate_unobtrusive_min_js = Url("jquery.validate.unobtrusive.min.js");
            }
            public static readonly string LICENSE_txt = Url("LICENSE.txt");
        }
    }
    public static readonly string favicon_ico = Url("favicon.ico");
}
#pragma warning restore 1591, 3008, 3009, 0108, CS8981
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/SG4MVC