├── src ├── Modules │ ├── OrchardCoreBlazorSample.Module1.Blazor │ │ ├── _Imports.razor │ │ ├── Parameterized.razor │ │ ├── Message.razor │ │ └── OrchardCoreBlazorSample.Module1.Blazor.csproj │ ├── OrchardCoreBlazorSample.Module1 │ │ ├── Views │ │ │ ├── MessageComponent.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ ├── ParameterizedComponent.cshtml │ │ │ └── Test │ │ │ │ └── Index.cshtml │ │ ├── Manifest.cs │ │ ├── Controllers │ │ │ └── TestController.cs │ │ ├── OrchardCoreBlazorSample.Module1.csproj │ │ └── BlazorStartup.cs │ └── OrchardCoreBlazorSample.Module2 │ │ ├── Views │ │ ├── _ViewImports.cshtml │ │ └── Test │ │ │ └── Index.cshtml │ │ ├── Manifest.cs │ │ ├── Controllers │ │ └── TestController.cs │ │ └── OrchardCoreBlazorSample.Module2.csproj ├── OrchardCoreBlazorSample.Web │ ├── wwwroot │ │ └── .placeholder │ ├── appsettings.Development.json │ ├── appsettings.json │ ├── OrchardCoreBlazorSample.Web.csproj │ ├── Properties │ │ └── launchSettings.json │ ├── Program.cs │ └── Startup.cs └── Themes │ └── OrchardCoreBlazorSample.Theme │ ├── Recipes │ └── blazor.sample.recipe.json │ ├── Views │ ├── _ViewImports.cshtml │ └── Layout.cshtml │ ├── Manifest.cs │ └── OrchardCoreBlazorSample.Theme.csproj ├── NuGet.config ├── Readme.md ├── .gitignore └── OrchardCoreBlazorSample.sln /src/Modules/OrchardCoreBlazorSample.Module1.Blazor/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using Microsoft.AspNetCore.Components.Web 2 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/wwwroot/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barthamark/Orchard-Core-Blazor-Sample/HEAD/src/OrchardCoreBlazorSample.Web/wwwroot/.placeholder -------------------------------------------------------------------------------- /src/Themes/OrchardCoreBlazorSample.Theme/Recipes/blazor.sample.recipe.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/barthamark/Orchard-Core-Blazor-Sample/HEAD/src/Themes/OrchardCoreBlazorSample.Theme/Recipes/blazor.sample.recipe.json -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1.Blazor/Parameterized.razor: -------------------------------------------------------------------------------- 1 |

Parameterized Component

2 | 3 |

Hello @FullName

4 | 5 | 6 | @code { 7 | [Parameter] 8 | public string FullName { get; set; } 9 | } -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1.Blazor/Message.razor: -------------------------------------------------------------------------------- 1 |

Message Component

2 | 3 | 4 | 5 |

message: @message

6 | 7 | 8 | @code { 9 | string message; 10 | } 11 | -------------------------------------------------------------------------------- /NuGet.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Views/MessageComponent.cshtml: -------------------------------------------------------------------------------- 1 | @* This is the component rendering for Message Blazor component. *@ 2 | 3 | @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft": "Warning", 6 | "Microsoft.Hosting.Lifetime": "Information" 7 | } 8 | }, 9 | "AllowedHosts": "*" 10 | } 11 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @inherits OrchardCore.DisplayManagement.Razor.RazorPage 2 | 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | @addTagHelper *, OrchardCore.DisplayManagement 5 | @addTagHelper *, OrchardCore.ResourceManagement -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module2/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @inherits OrchardCore.DisplayManagement.Razor.RazorPage 2 | 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | @addTagHelper *, OrchardCore.DisplayManagement 5 | @addTagHelper *, OrchardCore.ResourceManagement -------------------------------------------------------------------------------- /src/Themes/OrchardCoreBlazorSample.Theme/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @inherits OrchardCore.DisplayManagement.Razor.RazorPage 2 | 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | @addTagHelper *, OrchardCore.DisplayManagement 5 | @addTagHelper *, OrchardCore.ResourceManagement -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Manifest.cs: -------------------------------------------------------------------------------- 1 | using OrchardCore.Modules.Manifest; 2 | 3 | [assembly: Module( 4 | Name = "Orchard Core Blazor Sample - Module 1", 5 | Author = "Márk Bartha", 6 | Website = "http://markbartha.com", 7 | Version = "1.0", 8 | Description = "Sample module 1.", 9 | Category = "Samples" 10 | )] 11 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module2/Manifest.cs: -------------------------------------------------------------------------------- 1 | using OrchardCore.Modules.Manifest; 2 | 3 | [assembly: Module( 4 | Name = "Orchard Core Blazor Sample - Module 2", 5 | Author = "Márk Bartha", 6 | Website = "http://markbartha.com", 7 | Version = "1.0", 8 | Description = "Sample module 2.", 9 | Category = "Samples" 10 | )] 11 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module2/Views/Test/Index.cshtml: -------------------------------------------------------------------------------- 1 | @T["Hello from Module 2!"] 2 | 3 | @* It renders an Orchard Core shape and passes a parameter to it. The shape will initialize the Blazor component and use this parameter. 4 | See ParameterizedComponent.cshtml in Module1. *@ 5 | 6 | -------------------------------------------------------------------------------- /src/Themes/OrchardCoreBlazorSample.Theme/Manifest.cs: -------------------------------------------------------------------------------- 1 | using OrchardCore.DisplayManagement.Manifest; 2 | 3 | [assembly: Theme( 4 | Name = "Orchard Core Blazor Sample - Theme", 5 | Author = "Márk Bartha", 6 | Website = "http://markbartha.com", 7 | Version = "1.0", 8 | Description = "Theme for Orchard Core Blazor Sample project.", 9 | Category = "Samples", 10 | BaseTheme = "TheTheme" 11 | )] 12 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Views/ParameterizedComponent.cshtml: -------------------------------------------------------------------------------- 1 | @* This is a parameterized component rendering. The parameters are coming from Orchard Core shape rendering. 2 | See OrchardCoreBlazorSample.Module2/Views/Test/Index.cshtml to see how it's initialized. *@ 3 | 4 | @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered, new { FullName = Model.FullName })) -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Views/Test/Index.cshtml: -------------------------------------------------------------------------------- 1 | @T["Hello from Module 1!"] 2 | 3 | @* This is an Orchard Core shape tag helper. It wraps the actual Blazor component rendering. It is not neccessary but it 4 | demonstrates that you can reuse a component rendering (or parameterization, for this please see Module2) using shapes. 5 | See MessageComponent.cshtml or ParameterizedComponent.cshtml.*@ 6 | 7 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/Controllers/TestController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | 3 | namespace OrchardCoreBlazorSample.Module1.Controllers 4 | { 5 | // Sample controller for displaying a Blazor component implemented in OrchardCoreBlazorSample.Module1.Blazor project. 6 | public class TestController : Controller 7 | { 8 | [Route("test/module1")] 9 | public ActionResult Index() 10 | { 11 | return View(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module2/Controllers/TestController.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | 3 | namespace OrchardCoreBlazorSample.Module2.Controllers 4 | { 5 | // Sample controller for displaying a parameterized Blazor component implemented in OrchardCoreBlazorSample.Module1.Blazor project. 6 | public class TestController : Controller 7 | { 8 | [Route("test/module2")] 9 | public ActionResult Index() 10 | { 11 | return View(); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1.Blazor/OrchardCoreBlazorSample.Module1.Blazor.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 3.0 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/OrchardCoreBlazorSample.Web.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/Themes/OrchardCoreBlazorSample.Theme/OrchardCoreBlazorSample.Theme.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:59475", 7 | "sslPort": 44333 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "OrchardCoreBlazorSample.Web": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "applicationUrl": "https://localhost:5001;http://localhost:5000", 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Hosting; 6 | using Microsoft.Extensions.Configuration; 7 | using Microsoft.Extensions.Hosting; 8 | using Microsoft.Extensions.Logging; 9 | 10 | namespace OrchardCoreBlazorSample.Web 11 | { 12 | public class Program 13 | { 14 | public static void Main(string[] args) 15 | { 16 | CreateHostBuilder(args).Build().Run(); 17 | } 18 | 19 | public static IHostBuilder CreateHostBuilder(string[] args) => 20 | Host.CreateDefaultBuilder(args) 21 | .ConfigureWebHostDefaults(webBuilder => 22 | { 23 | webBuilder.UseStartup(); 24 | }); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module2/OrchardCoreBlazorSample.Module2.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/OrchardCoreBlazorSample.Module1.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | true 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/Modules/OrchardCoreBlazorSample.Module1/BlazorStartup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Builder; 2 | using Microsoft.AspNetCore.Routing; 3 | using Microsoft.Extensions.DependencyInjection; 4 | using OrchardCore.Modules; 5 | using System; 6 | 7 | namespace OrchardCoreBlazorSample.Module1 8 | { 9 | // This is an Orchard Core Startup class. This one is specifically created to initialize Blazor services and the SignalR hub. 10 | // Note, that it should run only once so you might want to create a Blazor base module where you put this Startup class and 11 | // use that module as a dependency for all your Blazor-specific modules. 12 | public class BlazorStartup : StartupBase 13 | { 14 | public override void ConfigureServices(IServiceCollection services) 15 | { 16 | services.AddServerSideBlazor(); 17 | } 18 | 19 | public override void Configure(IApplicationBuilder app, IEndpointRouteBuilder routes, IServiceProvider serviceProvider) 20 | { 21 | routes.MapBlazorHub(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Orchard Core Blazor Sample 2 | 3 | This is a sample **Orchard Core CMS** project to demonstrate Orchard Core modules using **server-side** Blazor components. The idea is to be able to build a modularized CMS website using server-side Blazor. If you are planning to build a decoupled CMS websites or a Blazor-only SPA then another approach might be required. 4 | 5 | Please note, that implementing a workaround was required to make Blazor static contents (e.g. blazor.server.js) accessible. See: https://github.com/OrchardCMS/OrchardCore/issues/2966#issuecomment-555506779 6 | 7 | ## How to use this sample 8 | 9 | 1. Clone the repository, restore and build. Please note that the solution uses the latest Orchard Core dev build which means that the referenced NuGet packages won't be available after some time. To solve this issue please update the Orchard Core package versions to the latest (which also means that something might broke). After the next major version is released this project should be upgraded as well to use a stable version. 10 | 2. Set up the Orchard Core website using the `Blazor Sample` recipe. You can use any recipe but make sure to enable the `OrchardCoreBlazorSample.Theme` theme and the `OrchardCoreBlazorSample.Module1` and `OrchardCoreBlazorSample.Module2` modules. 11 | 3. You can test Blazor components under the `/test/module1` and `/test/module2` URLs. 12 | 4. Explanations are in the comments. Please make sure you go through the source code, more specifically go to: 13 | * `OrchardCoreBlazorSample.Web/Startup.cs` 14 | * `OrchardCoreBlazorSample.Module1/Startup.cs` 15 | * `OrchardCoreBlazorSample.Module2/Views` (see all files) 16 | * `OrchardCoreBlazorSample.Module2/Views` (see all files) 17 | * `OrchardCoreBlazorSample.Theme/Views/Layout.cshtml` -------------------------------------------------------------------------------- /src/Themes/OrchardCoreBlazorSample.Theme/Views/Layout.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | @* This is required for server-side Blazor. *@ 10 | 11 | 12 | @RenderTitleSegments(Site.SiteName, "before") 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 28 | 29 |
30 |
31 |
32 | @await RenderSectionAsync("Header", false) 33 | 34 | @await RenderBodyAsync() 35 |
36 |
37 |
38 |
39 |
40 | @await RenderSectionAsync("Footer", false) 41 |
42 |
43 |
44 | 45 | @* It includes the blazor.server.js. You can use Orchard Core resource management for this if you have a Blazor base project 46 | (i.e. adding a "Blazor" resource for this file). *@ 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/OrchardCoreBlazorSample.Web/Startup.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Builder; 2 | using Microsoft.AspNetCore.Hosting; 3 | using Microsoft.AspNetCore.StaticFiles; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using Microsoft.Extensions.DependencyInjection.Extensions; 6 | using Microsoft.Extensions.FileProviders; 7 | using Microsoft.Extensions.Hosting; 8 | using Microsoft.Extensions.Options; 9 | using System; 10 | 11 | namespace OrchardCoreBlazorSample.Web 12 | { 13 | public class Startup 14 | { 15 | public void ConfigureServices(IServiceCollection services) 16 | { 17 | services.AddOrchardCms(); 18 | 19 | // This is a workaround to make Blazor static contents accessible. See: https://github.com/OrchardCMS/OrchardCore/issues/2966#issuecomment-555506779 20 | services.TryAddEnumerable(ServiceDescriptor.Singleton, BlazorConfigureStaticFilesOptions>()); 21 | } 22 | 23 | public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 24 | { 25 | if (env.IsDevelopment()) 26 | { 27 | app.UseDeveloperExceptionPage(); 28 | } 29 | 30 | app.UseStaticFiles(); 31 | 32 | app.UseOrchardCore(); 33 | } 34 | } 35 | 36 | 37 | // This is a workaround to make Blazor static contents accessible. See: https://github.com/OrchardCMS/OrchardCore/issues/2966#issuecomment-555506779 38 | public class BlazorConfigureStaticFilesOptions : IPostConfigureOptions 39 | { 40 | private readonly IWebHostEnvironment _environment; 41 | 42 | public BlazorConfigureStaticFilesOptions(IWebHostEnvironment environment) 43 | { 44 | _environment = environment; 45 | } 46 | 47 | public void PostConfigure(string name, StaticFileOptions options) 48 | { 49 | name = name ?? throw new ArgumentNullException(nameof(name)); 50 | options = options ?? throw new ArgumentNullException(nameof(options)); 51 | 52 | if (name != Options.DefaultName) 53 | { 54 | return; 55 | } 56 | 57 | // Basic initialization in case the options weren't initialized by any other component 58 | options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider(); 59 | if (options.FileProvider == null && _environment.WebRootFileProvider == null) 60 | { 61 | throw new InvalidOperationException("Missing FileProvider."); 62 | } 63 | 64 | options.FileProvider = options.FileProvider ?? _environment.WebRootFileProvider; 65 | 66 | var provider = new ManifestEmbeddedFileProvider(typeof(IServerSideBlazorBuilder).Assembly); 67 | 68 | options.FileProvider = new CompositeFileProvider(provider, options.FileProvider); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.sln.docstates 8 | *.sln.ide/ 9 | 10 | # Build results 11 | 12 | [Dd]ebug/ 13 | [Rr]elease/ 14 | x64/ 15 | build/ 16 | app.publish/ 17 | [Bb]in/ 18 | [Oo]bj/ 19 | 20 | # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets 21 | !packages/*/build/ 22 | 23 | # MSTest test Results 24 | [Tt]est[Rr]esult*/ 25 | [Bb]uild[Ll]og.* 26 | 27 | *_i.c 28 | *_p.c 29 | *.ilk 30 | *.meta 31 | *.obj 32 | *.pch 33 | *.pdb 34 | *.pgc 35 | *.pgd 36 | *.rsp 37 | *.sbr 38 | *.tlb 39 | *.tli 40 | *.tlh 41 | *.tmp 42 | *.tmp_proj 43 | *.log 44 | *.vspscc 45 | *.vssscc 46 | .builds 47 | *.pidb 48 | *.log 49 | *.scc 50 | project.lock.json 51 | 52 | # Visual C++ cache files 53 | ipch/ 54 | *.aps 55 | *.ncb 56 | *.opensdf 57 | *.sdf 58 | *.cachefile 59 | 60 | # Visual Studio profiler 61 | *.psess 62 | *.vsp 63 | *.vspx 64 | 65 | # Guidance Automation Toolkit 66 | *.gpState 67 | 68 | # ReSharper is a .NET coding add-in 69 | _ReSharper*/ 70 | *.[Rr]e[Ss]harper 71 | 72 | # TeamCity is a build add-in 73 | _TeamCity* 74 | 75 | # DotCover is a Code Coverage Tool 76 | *.dotCover 77 | 78 | # NCrunch 79 | *.ncrunch* 80 | .*crunch*.local.xml 81 | 82 | # Installshield output folder 83 | [Ee]xpress/ 84 | 85 | # DocProject is a documentation generator add-in 86 | DocProject/buildhelp/ 87 | DocProject/Help/*.HxT 88 | DocProject/Help/*.HxC 89 | DocProject/Help/*.hhc 90 | DocProject/Help/*.hhk 91 | DocProject/Help/*.hhp 92 | DocProject/Help/Html2 93 | DocProject/Help/html 94 | 95 | # Click-Once directory 96 | publish/ 97 | 98 | # Publish Web Output 99 | *.Publish.xml 100 | *.pubxml 101 | 102 | # NuGet Packages Directory 103 | packages/ 104 | 105 | # Windows Azure Build Output 106 | csx 107 | *.build.csdef 108 | 109 | # Windows Store app package directory 110 | AppPackages/ 111 | 112 | # Others 113 | *.Cache 114 | !OrchardCore.Environment.Cache 115 | ClientBin/ 116 | [Ss]tyle[Cc]op.* 117 | ~$* 118 | *~ 119 | *.dbmdl 120 | *.[Pp]ublish.xml 121 | *.pfx 122 | *.publishsettings 123 | 124 | # RIA/Silverlight projects 125 | Generated_Code/ 126 | 127 | # Backup & report files from converting an old project file to a newer 128 | # Visual Studio version. Backup files are not needed, because we have git ;-) 129 | _UpgradeReport_Files/ 130 | Backup*/ 131 | UpgradeLog*.XML 132 | UpgradeLog*.htm 133 | 134 | # SQL Server files 135 | App_Data/*.mdf 136 | App_Data/*.ldf 137 | 138 | 139 | ## Windows and MAC detritus 140 | 141 | # Windows image file caches 142 | Thumbs.db 143 | ehthumbs.db 144 | 145 | # Folder config file 146 | Desktop.ini 147 | 148 | # Recycle Bin used on file shares 149 | $RECYCLE.BIN/ 150 | 151 | # Mac 152 | .DS_Store 153 | 154 | 155 | ## ASP.NET Core and Orchard Core specifics 156 | 157 | App_Data/ 158 | glob:*.user 159 | *.patch 160 | *.hg 161 | build/ 162 | /buildazure 163 | /buildtasks 164 | /artifacts 165 | site/ 166 | *.sln.cache 167 | log.xml 168 | profiling/ 169 | *.orig 170 | .vs/ 171 | #.vscode/ 172 | .build/ 173 | .testPublish/ 174 | 175 | nuget.exe 176 | .nuget/ 177 | 178 | # Enable all /lib artifacts 179 | !lib/*/*.* 180 | 181 | # Exclude node modules 182 | node_modules/ 183 | 184 | # Exclude wwwroot and add exceptions 185 | **/wwwroot/* 186 | !**/wwwroot/favicon.ico 187 | !**/wwwroot/.placeholder 188 | 189 | src/*.Web/Localization 190 | -------------------------------------------------------------------------------- /OrchardCoreBlazorSample.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29613.14 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{6BBD69CF-91EE-46BC-A387-3BAE21BC3CBD}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCoreBlazorSample.Web", "src\OrchardCoreBlazorSample.Web\OrchardCoreBlazorSample.Web.csproj", "{A50B4784-5F89-463F-BD70-86DAE7E597B3}" 9 | EndProject 10 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{7AFD8A61-8170-4430-8777-BDFB4B7B33F2}" 11 | EndProject 12 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{E99F3FFB-8CFA-4A8B-BF44-ABB911203CC3}" 13 | ProjectSection(SolutionItems) = preProject 14 | NuGet.config = NuGet.config 15 | Readme.md = Readme.md 16 | EndProjectSection 17 | EndProject 18 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCoreBlazorSample.Module1", "src\Modules\OrchardCoreBlazorSample.Module1\OrchardCoreBlazorSample.Module1.csproj", "{692F72C7-1B43-4F5A-8BFA-14F857D894B7}" 19 | EndProject 20 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Themes", "Themes", "{DCCE3FF3-97E5-4C0A-9802-9B75E8EC284D}" 21 | EndProject 22 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCoreBlazorSample.Theme", "src\Themes\OrchardCoreBlazorSample.Theme\OrchardCoreBlazorSample.Theme.csproj", "{E4C64284-B542-4A02-9C88-C047C50CCE2F}" 23 | EndProject 24 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCoreBlazorSample.Module2", "src\Modules\OrchardCoreBlazorSample.Module2\OrchardCoreBlazorSample.Module2.csproj", "{6677585C-43EB-429D-8983-A61282793DC2}" 25 | EndProject 26 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCoreBlazorSample.Module1.Blazor", "src\Modules\OrchardCoreBlazorSample.Module1.Blazor\OrchardCoreBlazorSample.Module1.Blazor.csproj", "{105A1233-1003-4D4E-BAC5-DFA1C399C576}" 27 | EndProject 28 | Global 29 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 30 | Debug|Any CPU = Debug|Any CPU 31 | Release|Any CPU = Release|Any CPU 32 | EndGlobalSection 33 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 34 | {A50B4784-5F89-463F-BD70-86DAE7E597B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 35 | {A50B4784-5F89-463F-BD70-86DAE7E597B3}.Debug|Any CPU.Build.0 = Debug|Any CPU 36 | {A50B4784-5F89-463F-BD70-86DAE7E597B3}.Release|Any CPU.ActiveCfg = Release|Any CPU 37 | {A50B4784-5F89-463F-BD70-86DAE7E597B3}.Release|Any CPU.Build.0 = Release|Any CPU 38 | {692F72C7-1B43-4F5A-8BFA-14F857D894B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 39 | {692F72C7-1B43-4F5A-8BFA-14F857D894B7}.Debug|Any CPU.Build.0 = Debug|Any CPU 40 | {692F72C7-1B43-4F5A-8BFA-14F857D894B7}.Release|Any CPU.ActiveCfg = Release|Any CPU 41 | {692F72C7-1B43-4F5A-8BFA-14F857D894B7}.Release|Any CPU.Build.0 = Release|Any CPU 42 | {E4C64284-B542-4A02-9C88-C047C50CCE2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 43 | {E4C64284-B542-4A02-9C88-C047C50CCE2F}.Debug|Any CPU.Build.0 = Debug|Any CPU 44 | {E4C64284-B542-4A02-9C88-C047C50CCE2F}.Release|Any CPU.ActiveCfg = Release|Any CPU 45 | {E4C64284-B542-4A02-9C88-C047C50CCE2F}.Release|Any CPU.Build.0 = Release|Any CPU 46 | {6677585C-43EB-429D-8983-A61282793DC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 47 | {6677585C-43EB-429D-8983-A61282793DC2}.Debug|Any CPU.Build.0 = Debug|Any CPU 48 | {6677585C-43EB-429D-8983-A61282793DC2}.Release|Any CPU.ActiveCfg = Release|Any CPU 49 | {6677585C-43EB-429D-8983-A61282793DC2}.Release|Any CPU.Build.0 = Release|Any CPU 50 | {105A1233-1003-4D4E-BAC5-DFA1C399C576}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 51 | {105A1233-1003-4D4E-BAC5-DFA1C399C576}.Debug|Any CPU.Build.0 = Debug|Any CPU 52 | {105A1233-1003-4D4E-BAC5-DFA1C399C576}.Release|Any CPU.ActiveCfg = Release|Any CPU 53 | {105A1233-1003-4D4E-BAC5-DFA1C399C576}.Release|Any CPU.Build.0 = Release|Any CPU 54 | EndGlobalSection 55 | GlobalSection(SolutionProperties) = preSolution 56 | HideSolutionNode = FALSE 57 | EndGlobalSection 58 | GlobalSection(NestedProjects) = preSolution 59 | {A50B4784-5F89-463F-BD70-86DAE7E597B3} = {6BBD69CF-91EE-46BC-A387-3BAE21BC3CBD} 60 | {7AFD8A61-8170-4430-8777-BDFB4B7B33F2} = {6BBD69CF-91EE-46BC-A387-3BAE21BC3CBD} 61 | {692F72C7-1B43-4F5A-8BFA-14F857D894B7} = {7AFD8A61-8170-4430-8777-BDFB4B7B33F2} 62 | {DCCE3FF3-97E5-4C0A-9802-9B75E8EC284D} = {6BBD69CF-91EE-46BC-A387-3BAE21BC3CBD} 63 | {E4C64284-B542-4A02-9C88-C047C50CCE2F} = {DCCE3FF3-97E5-4C0A-9802-9B75E8EC284D} 64 | {6677585C-43EB-429D-8983-A61282793DC2} = {7AFD8A61-8170-4430-8777-BDFB4B7B33F2} 65 | {105A1233-1003-4D4E-BAC5-DFA1C399C576} = {7AFD8A61-8170-4430-8777-BDFB4B7B33F2} 66 | EndGlobalSection 67 | GlobalSection(ExtensibilityGlobals) = postSolution 68 | SolutionGuid = {80347105-FE2F-4697-A6C2-F91E45706DF6} 69 | EndGlobalSection 70 | EndGlobal 71 | --------------------------------------------------------------------------------