From f2d24a1545f4f5ba6bedcc656ed9d8ac88dc174e Mon Sep 17 00:00:00 2001 From: the1mason Date: Wed, 23 Apr 2025 09:20:12 +0500 Subject: [PATCH] Started adding plugins --- FastBlog.sln | 26 +- .../FastBlog.PluginBase.csproj | 9 - plugins/Plugin1/Plugin1.cs | 19 + plugins/Plugin1/Plugin1.csproj | 28 ++ .../Plugin1.runtimeconfig.template.json | 7 + plugins/Plugin1/plugin1.manifest.json | 6 + .../Plugin2/Controllers/Plugin2Controller.cs | 16 + plugins/Plugin2/Plugin2.cs | 19 + plugins/Plugin2/Plugin2.csproj | 42 ++ .../Plugin2.runtimeconfig.template.json | 7 + plugins/Plugin2/Views/Plugin2/Index.cshtml | 3 + plugins/Plugin2/plugin2.manifest.json | 6 + src/FastBlog.Core/FastBlog.Core.csproj | 12 - src/FastBlog.PluginLoader/Class1.cs | 6 - .../FastBlog.PluginLoader.csproj | 9 - src/FastBlog.Web/FastBlog.Web.csproj | 20 + .../Plugins/Plugin1/Plugin1.deps.json | 439 ++++++++++++++++++ src/FastBlog.Web/Plugins/Plugin1/Plugin1.dll | Bin 0 -> 4608 bytes .../Plugin1/Plugin1.runtimeconfig.json | 19 + .../Plugin1.runtimeconfig.template.json | 7 + .../Plugins/Plugin1/TestLib.Writer.dll | Bin 0 -> 4096 bytes .../Plugins/Plugin1/plugin1.manifest.json | 6 + .../Plugins/Plugin2/Plugin2.deps.json | 439 ++++++++++++++++++ src/FastBlog.Web/Plugins/Plugin2/Plugin2.dll | Bin 0 -> 10240 bytes .../Plugin2/Plugin2.runtimeconfig.json | 20 + .../Plugin2.runtimeconfig.template.json | 7 + .../Plugins/Plugin2/TestLib.Writer.dll | Bin 0 -> 4096 bytes .../Plugins/Plugin2/plugin2.manifest.json | 6 + src/FastBlog.Web/Program.cs | 21 +- 29 files changed, 1148 insertions(+), 51 deletions(-) delete mode 100644 lib/FastBlog.PluginBase/FastBlog.PluginBase.csproj create mode 100644 plugins/Plugin1/Plugin1.cs create mode 100644 plugins/Plugin1/Plugin1.csproj create mode 100644 plugins/Plugin1/Plugin1.runtimeconfig.template.json create mode 100644 plugins/Plugin1/plugin1.manifest.json create mode 100644 plugins/Plugin2/Controllers/Plugin2Controller.cs create mode 100644 plugins/Plugin2/Plugin2.cs create mode 100644 plugins/Plugin2/Plugin2.csproj create mode 100644 plugins/Plugin2/Plugin2.runtimeconfig.template.json create mode 100644 plugins/Plugin2/Views/Plugin2/Index.cshtml create mode 100644 plugins/Plugin2/plugin2.manifest.json delete mode 100644 src/FastBlog.PluginLoader/Class1.cs delete mode 100644 src/FastBlog.PluginLoader/FastBlog.PluginLoader.csproj create mode 100644 src/FastBlog.Web/Plugins/Plugin1/Plugin1.deps.json create mode 100644 src/FastBlog.Web/Plugins/Plugin1/Plugin1.dll create mode 100644 src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.json create mode 100644 src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.template.json create mode 100644 src/FastBlog.Web/Plugins/Plugin1/TestLib.Writer.dll create mode 100644 src/FastBlog.Web/Plugins/Plugin1/plugin1.manifest.json create mode 100644 src/FastBlog.Web/Plugins/Plugin2/Plugin2.deps.json create mode 100644 src/FastBlog.Web/Plugins/Plugin2/Plugin2.dll create mode 100644 src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.json create mode 100644 src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.template.json create mode 100644 src/FastBlog.Web/Plugins/Plugin2/TestLib.Writer.dll create mode 100644 src/FastBlog.Web/Plugins/Plugin2/plugin2.manifest.json diff --git a/FastBlog.sln b/FastBlog.sln index 6774758..99e5211 100644 --- a/FastBlog.sln +++ b/FastBlog.sln @@ -9,11 +9,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.Web", "src\FastBlo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.Core", "src\FastBlog.Core\FastBlog.Core.csproj", "{B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{240F51ED-532D-4980-8091-D9250EC7E7BD}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "plugins", "plugins", "{5036CE06-EB58-41ED-9A0B-58372A72BEC7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.PluginBase", "lib\FastBlog.PluginBase\FastBlog.PluginBase.csproj", "{79C5D3D1-2ACB-4640-B8B0-A2B67514D041}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin1", "plugins\Plugin1\Plugin1.csproj", "{79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastBlog.PluginLoader", "src\FastBlog.PluginLoader\FastBlog.PluginLoader.csproj", "{55384AAF-FCC5-4014-BABE-855575436217}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugin2", "plugins\Plugin2\Plugin2.csproj", "{743460B8-3E15-41E9-A3DE-E6789AF682B5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -32,19 +32,19 @@ Global {B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Debug|Any CPU.Build.0 = Debug|Any CPU {B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC}.Release|Any CPU.Build.0 = Release|Any CPU - {79C5D3D1-2ACB-4640-B8B0-A2B67514D041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79C5D3D1-2ACB-4640-B8B0-A2B67514D041}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79C5D3D1-2ACB-4640-B8B0-A2B67514D041}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79C5D3D1-2ACB-4640-B8B0-A2B67514D041}.Release|Any CPU.Build.0 = Release|Any CPU - {55384AAF-FCC5-4014-BABE-855575436217}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {55384AAF-FCC5-4014-BABE-855575436217}.Debug|Any CPU.Build.0 = Debug|Any CPU - {55384AAF-FCC5-4014-BABE-855575436217}.Release|Any CPU.ActiveCfg = Release|Any CPU - {55384AAF-FCC5-4014-BABE-855575436217}.Release|Any CPU.Build.0 = Release|Any CPU + {79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05}.Release|Any CPU.Build.0 = Release|Any CPU + {743460B8-3E15-41E9-A3DE-E6789AF682B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {743460B8-3E15-41E9-A3DE-E6789AF682B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {743460B8-3E15-41E9-A3DE-E6789AF682B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {743460B8-3E15-41E9-A3DE-E6789AF682B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {C9A19395-1E93-488F-AD10-2C7D2DB78EB0} = {D7A1C18D-CC03-4704-B5B7-2F8B1A04E279} {B8CDA182-8097-4EF5-8EE2-CB73AF4B58AC} = {D7A1C18D-CC03-4704-B5B7-2F8B1A04E279} - {79C5D3D1-2ACB-4640-B8B0-A2B67514D041} = {240F51ED-532D-4980-8091-D9250EC7E7BD} - {55384AAF-FCC5-4014-BABE-855575436217} = {D7A1C18D-CC03-4704-B5B7-2F8B1A04E279} + {79DEDFD2-BEE7-48C1-B6D5-89A6C9A3EC05} = {5036CE06-EB58-41ED-9A0B-58372A72BEC7} + {743460B8-3E15-41E9-A3DE-E6789AF682B5} = {5036CE06-EB58-41ED-9A0B-58372A72BEC7} EndGlobalSection EndGlobal diff --git a/lib/FastBlog.PluginBase/FastBlog.PluginBase.csproj b/lib/FastBlog.PluginBase/FastBlog.PluginBase.csproj deleted file mode 100644 index fa71b7a..0000000 --- a/lib/FastBlog.PluginBase/FastBlog.PluginBase.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net8.0 - enable - enable - - - diff --git a/plugins/Plugin1/Plugin1.cs b/plugins/Plugin1/Plugin1.cs new file mode 100644 index 0000000..a0c1ad1 --- /dev/null +++ b/plugins/Plugin1/Plugin1.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.DependencyInjection; +using RainCrab.Plugins.AspNet; +using TestLib.Writer; + +namespace Plugin1; + +public class Plugin1 : IWebPlugin +{ + public Task ConfigureAsync(WebPluginLoadContext loadContext) + { + loadContext.ApplicationBuilder.Services.AddSingleton(); + return Task.CompletedTask; + } + + public Task ShutdownAsync(WebPluginLoadContext loadContext) + { + return Task.CompletedTask; + } +} diff --git a/plugins/Plugin1/Plugin1.csproj b/plugins/Plugin1/Plugin1.csproj new file mode 100644 index 0000000..891d3d6 --- /dev/null +++ b/plugins/Plugin1/Plugin1.csproj @@ -0,0 +1,28 @@ + + + + net8.0 + enable + enable + true + true + true + + + + + runtime + + + + + + + Always + + + PreserveNewest + + + + diff --git a/plugins/Plugin1/Plugin1.runtimeconfig.template.json b/plugins/Plugin1/Plugin1.runtimeconfig.template.json new file mode 100644 index 0000000..2a7fedf --- /dev/null +++ b/plugins/Plugin1/Plugin1.runtimeconfig.template.json @@ -0,0 +1,7 @@ +{ + "runtimeOptions": { + "additionalProbingPaths": [ + "../." + ] + } +} \ No newline at end of file diff --git a/plugins/Plugin1/plugin1.manifest.json b/plugins/Plugin1/plugin1.manifest.json new file mode 100644 index 0000000..e0ed235 --- /dev/null +++ b/plugins/Plugin1/plugin1.manifest.json @@ -0,0 +1,6 @@ +{ + "Id": "plugin1", + "Version": "1.0.0", + "Assembly": "Plugin1.dll", + "Name": "Plugin1" +} \ No newline at end of file diff --git a/plugins/Plugin2/Controllers/Plugin2Controller.cs b/plugins/Plugin2/Controllers/Plugin2Controller.cs new file mode 100644 index 0000000..7bc4553 --- /dev/null +++ b/plugins/Plugin2/Controllers/Plugin2Controller.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using TestLib.Writer; + +namespace Plugin2.Controllers; + +[Route("Plugin2")] +public class Plugin2Controller : Controller +{ + public sealed record Plugin2Model(string Result); + + [Route("Index")] + public IActionResult Index() + { + return View(new Plugin2Model("123")); + } +} \ No newline at end of file diff --git a/plugins/Plugin2/Plugin2.cs b/plugins/Plugin2/Plugin2.cs new file mode 100644 index 0000000..9b5a250 --- /dev/null +++ b/plugins/Plugin2/Plugin2.cs @@ -0,0 +1,19 @@ +using Microsoft.Extensions.DependencyInjection; +using RainCrab.Plugins.AspNet; + +namespace Plugin2; + +public class Plugin2 : IWebPlugin +{ + public Task ConfigureAsync(WebPluginLoadContext loadContext) + { + loadContext.ApplicationBuilder.Services.AddControllersWithViews() + .AddApplicationPart(typeof(Plugin2).Assembly); + return Task.CompletedTask; + } + + public Task ShutdownAsync(WebPluginLoadContext loadContext) + { + return Task.CompletedTask; + } +} diff --git a/plugins/Plugin2/Plugin2.csproj b/plugins/Plugin2/Plugin2.csproj new file mode 100644 index 0000000..9ad5e74 --- /dev/null +++ b/plugins/Plugin2/Plugin2.csproj @@ -0,0 +1,42 @@ + +g + net8.0 + enable + enable + true + true + true + + + + + runtime + + + + + + + + + + + + Always + + + Always + + + + + + + + + + Never + + + + diff --git a/plugins/Plugin2/Plugin2.runtimeconfig.template.json b/plugins/Plugin2/Plugin2.runtimeconfig.template.json new file mode 100644 index 0000000..2a7fedf --- /dev/null +++ b/plugins/Plugin2/Plugin2.runtimeconfig.template.json @@ -0,0 +1,7 @@ +{ + "runtimeOptions": { + "additionalProbingPaths": [ + "../." + ] + } +} \ No newline at end of file diff --git a/plugins/Plugin2/Views/Plugin2/Index.cshtml b/plugins/Plugin2/Views/Plugin2/Index.cshtml new file mode 100644 index 0000000..d0654be --- /dev/null +++ b/plugins/Plugin2/Views/Plugin2/Index.cshtml @@ -0,0 +1,3 @@ +@model Plugin2.Controllers.Plugin2Controller.Plugin2Model; + +

@Model.Result

\ No newline at end of file diff --git a/plugins/Plugin2/plugin2.manifest.json b/plugins/Plugin2/plugin2.manifest.json new file mode 100644 index 0000000..99f9734 --- /dev/null +++ b/plugins/Plugin2/plugin2.manifest.json @@ -0,0 +1,6 @@ +{ + "Id": "plugin2", + "Version": "1.0.0", + "Assembly": "Plugin2.dll", + "Name": "Plugin2" +} \ No newline at end of file diff --git a/src/FastBlog.Core/FastBlog.Core.csproj b/src/FastBlog.Core/FastBlog.Core.csproj index 7fd103d..c4f30ce 100644 --- a/src/FastBlog.Core/FastBlog.Core.csproj +++ b/src/FastBlog.Core/FastBlog.Core.csproj @@ -6,18 +6,6 @@ enable - - - ..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.4\Microsoft.Extensions.Caching.Memory.dll - - - ..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.4\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.4\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - diff --git a/src/FastBlog.PluginLoader/Class1.cs b/src/FastBlog.PluginLoader/Class1.cs deleted file mode 100644 index 3baa111..0000000 --- a/src/FastBlog.PluginLoader/Class1.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace FastBlog.PluginLoader; - -public class Class1 -{ - -} diff --git a/src/FastBlog.PluginLoader/FastBlog.PluginLoader.csproj b/src/FastBlog.PluginLoader/FastBlog.PluginLoader.csproj deleted file mode 100644 index fa71b7a..0000000 --- a/src/FastBlog.PluginLoader/FastBlog.PluginLoader.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - net8.0 - enable - enable - - - diff --git a/src/FastBlog.Web/FastBlog.Web.csproj b/src/FastBlog.Web/FastBlog.Web.csproj index d84886a..64a3d9e 100644 --- a/src/FastBlog.Web/FastBlog.Web.csproj +++ b/src/FastBlog.Web/FastBlog.Web.csproj @@ -15,6 +15,7 @@ + @@ -22,4 +23,23 @@ + + + PreserveNewest + + + + + + + + + + + + + + + + diff --git a/src/FastBlog.Web/Plugins/Plugin1/Plugin1.deps.json b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.deps.json new file mode 100644 index 0000000..29fb1b9 --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.deps.json @@ -0,0 +1,439 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "Plugin1/1.0.0": { + "dependencies": { + "RainCrab.Plugins.AspNet": "0.1.11", + "TestLib.Writer": "1.0.0" + }, + "runtime": { + "Plugin1.dll": {} + } + }, + "Microsoft.AspNetCore.Hosting/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Hosting.Abstractions": "2.3.0", + "Microsoft.AspNetCore.Http": "2.3.0", + "Microsoft.AspNetCore.Http.Extensions": "2.3.0", + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "8.0.0", + "Microsoft.Extensions.Configuration.FileExtensions": "8.0.1", + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Debug": "8.0.1", + "Microsoft.Extensions.Options": "8.0.2", + "System.Diagnostics.DiagnosticSource": "8.0.1", + "System.Reflection.Metadata": "8.0.1" + } + }, + "Microsoft.AspNetCore.Hosting.Abstractions/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.3.0", + "Microsoft.AspNetCore.Http.Abstractions": "2.3.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1" + } + }, + "Microsoft.AspNetCore.Hosting.Server.Abstractions/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "2.3.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.AspNetCore.Http/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.3.0", + "Microsoft.AspNetCore.WebUtilities": "2.3.0", + "Microsoft.Extensions.ObjectPool": "8.0.11", + "Microsoft.Extensions.Options": "8.0.2", + "Microsoft.Net.Http.Headers": "2.3.0" + } + }, + "Microsoft.AspNetCore.Http.Abstractions/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Http.Features": "2.3.0", + "System.Text.Encodings.Web": "8.0.0" + } + }, + "Microsoft.AspNetCore.Http.Extensions/2.3.0": { + "dependencies": { + "Microsoft.AspNetCore.Http.Abstractions": "2.3.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Net.Http.Headers": "2.3.0", + "System.Buffers": "4.6.0" + } + }, + "Microsoft.AspNetCore.Http.Features/2.3.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.AspNetCore.WebUtilities/2.3.0": { + "dependencies": { + "Microsoft.Net.Http.Headers": "2.3.0", + "System.Text.Encodings.Web": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0" + } + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration": "8.0.0", + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileProviders.Physical": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": {}, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "dependencies": { + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.FileSystemGlobbing": "8.0.0", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": {}, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.Logging/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + } + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.Logging.Debug/8.0.1": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Logging": "8.0.1", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + } + }, + "Microsoft.Extensions.ObjectPool/8.0.11": {}, + "Microsoft.Extensions.Options/8.0.2": { + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Primitives": "8.0.0" + } + }, + "Microsoft.Extensions.Primitives/8.0.0": {}, + "Microsoft.Net.Http.Headers/2.3.0": { + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0", + "System.Buffers": "4.6.0" + } + }, + "RainCrab.Plugins.AspNet/0.1.11": { + "dependencies": { + "Microsoft.AspNetCore.Hosting": "2.3.0", + "RainCrab.Plugins.Base": "0.1.7" + } + }, + "RainCrab.Plugins.Base/0.1.7": { + "dependencies": { + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + } + }, + "System.Buffers/4.6.0": {}, + "System.Diagnostics.DiagnosticSource/8.0.1": {}, + "System.Reflection.Metadata/8.0.1": {}, + "System.Text.Encodings.Web/8.0.0": {}, + "TestLib.Writer/1.0.0": { + "runtime": { + "lib/net8.0/TestLib.Writer.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "Plugin1/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "Microsoft.AspNetCore.Hosting/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JI/AVsh5OIZu0l2LpuQVUEYKHyLgeXV9uPiGf/IfF3r5sXj/Zcb2tpyxdVMM7y91+V8AUk/ZfwmEkf7pivT8xQ==", + "path": "microsoft.aspnetcore.hosting/2.3.0", + "hashPath": "microsoft.aspnetcore.hosting.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Hosting.Abstractions/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4ivq53W2k6Nj4eez9wc81ytfGj6HR1NaZJCpOrvghJo9zHuQF57PLhPoQH5ItyCpHXnrN/y7yJDUm+TGYzrx0w==", + "path": "microsoft.aspnetcore.hosting.abstractions/2.3.0", + "hashPath": "microsoft.aspnetcore.hosting.abstractions.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Hosting.Server.Abstractions/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-F5iHx7odAbFKBV1DNPDkFFcVmD5Tk7rk+tYm3LMQxHEFFdjlg5QcYb5XhHAefl5YaaPeG6ad+/ck8kSG3/D6kw==", + "path": "microsoft.aspnetcore.hosting.server.abstractions/2.3.0", + "hashPath": "microsoft.aspnetcore.hosting.server.abstractions.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Http/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-I9azEG2tZ4DDHAFgv+N38e6Yhttvf+QjE2j2UYyCACE7Swm5/0uoihCMWZ87oOZYeqiEFSxbsfpT71OYHe2tpw==", + "path": "microsoft.aspnetcore.http/2.3.0", + "hashPath": "microsoft.aspnetcore.http.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Http.Abstractions/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-39r9PPrjA6s0blyFv5qarckjNkaHRA5B+3b53ybuGGNTXEj1/DStQJ4NWjFL6QTRQpL9zt7nDyKxZdJOlcnq+Q==", + "path": "microsoft.aspnetcore.http.abstractions/2.3.0", + "hashPath": "microsoft.aspnetcore.http.abstractions.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Http.Extensions/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EY2u/wFF5jsYwGXXswfQWrSsFPmiXsniAlUWo3rv/MGYf99ZFsENDnZcQP6W3c/+xQmQXq0NauzQ7jyy+o1LDQ==", + "path": "microsoft.aspnetcore.http.extensions/2.3.0", + "hashPath": "microsoft.aspnetcore.http.extensions.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.Http.Features/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-f10WUgcsKqrkmnz6gt8HeZ7kyKjYN30PO7cSic1lPtH7paPtnQqXPOveul/SIPI43PhRD4trttg4ywnrEmmJpA==", + "path": "microsoft.aspnetcore.http.features/2.3.0", + "hashPath": "microsoft.aspnetcore.http.features.2.3.0.nupkg.sha512" + }, + "Microsoft.AspNetCore.WebUtilities/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-trbXdWzoAEUVd0PE2yTopkz4kjZaAIA7xUWekd5uBw+7xE8Do/YOVTeb9d9koPTlbtZT539aESJjSLSqD8eYrQ==", + "path": "microsoft.aspnetcore.webutilities/2.3.0", + "hashPath": "microsoft.aspnetcore.webutilities.2.3.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0J/9YNXTMWSZP2p2+nvl8p71zpSwokZXZuJW+VjdErkegAnFdO1XlqtA62SJtgVYHdKu3uPxJHcMR/r35HwFBA==", + "path": "microsoft.extensions.configuration/8.0.0", + "hashPath": "microsoft.extensions.configuration.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3lE/iLSutpgX1CC0NOW70FJoGARRHbyKmG7dc0klnUZ9Dd9hS6N/POPWhKhMLCEuNN5nXEY5agmlFtH562vqhQ==", + "path": "microsoft.extensions.configuration.abstractions/8.0.0", + "hashPath": "microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.EnvironmentVariables/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-plvZ0ZIpq+97gdPNNvhwvrEZ92kNml9hd1pe3idMA7svR0PztdzVLkoWLcRFgySYXUJc3kSM3Xw3mNFMo/bxRA==", + "path": "microsoft.extensions.configuration.environmentvariables/8.0.0", + "hashPath": "microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Configuration.FileExtensions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EJzSNO9oaAXnTdtdNO6npPRsIIeZCBSNmdQ091VDO7fBiOtJAAeEq6dtrVXIi3ZyjC5XRSAtVvF8SzcneRHqKQ==", + "path": "microsoft.extensions.configuration.fileextensions/8.0.1", + "hashPath": "microsoft.extensions.configuration.fileextensions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BmANAnR5Xd4Oqw7yQ75xOAYODybZQRzdeNucg7kS5wWKd2PNnMdYtJ2Vciy0QLylRmv42DGl5+AFL9izA6F1Rw==", + "path": "microsoft.extensions.dependencyinjection/8.0.1", + "hashPath": "microsoft.extensions.dependencyinjection.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", + "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.1", + "hashPath": "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileProviders.Physical/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-UboiXxpPUpwulHvIAVE36Knq0VSHaAmfrFkegLyBZeaADuKezJ/AIXYAW8F5GBlGk/VaibN2k/Zn1ca8YAfVdA==", + "path": "microsoft.extensions.fileproviders.physical/8.0.0", + "hashPath": "microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.FileSystemGlobbing/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OK+670i7esqlQrPjdIKRbsyMCe9g5kSLpRRQGSr4Q58AOYEe/hCnfLZprh7viNisSUUQZmMrbbuDaIrP+V1ebQ==", + "path": "microsoft.extensions.filesystemglobbing/8.0.0", + "hashPath": "microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512" + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", + "path": "microsoft.extensions.hosting.abstractions/8.0.1", + "hashPath": "microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-4x+pzsQEbqxhNf1QYRr5TDkLP9UsLT3A6MdRKDDEgrW7h1ljiEPgTNhKYUhNCCAaVpQECVQ+onA91PTPnIp6Lw==", + "path": "microsoft.extensions.logging/8.0.1", + "hashPath": "microsoft.extensions.logging.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", + "path": "microsoft.extensions.logging.abstractions/8.0.2", + "hashPath": "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Logging.Debug/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-B8hqNuYudC2RB+L/DI33uO4rf5by41fZVdcVL2oZj0UyoAZqnwTwYHp1KafoH4nkl1/23piNeybFFASaV2HkFg==", + "path": "microsoft.extensions.logging.debug/8.0.1", + "hashPath": "microsoft.extensions.logging.debug.8.0.1.nupkg.sha512" + }, + "Microsoft.Extensions.ObjectPool/8.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6ApKcHNJigXBfZa6XlDQ8feJpq7SG1ogZXg6M4FiNzgd6irs3LUAzo0Pfn4F2ZI9liGnH1XIBR/OtSbZmJAV5w==", + "path": "microsoft.extensions.objectpool/8.0.11", + "hashPath": "microsoft.extensions.objectpool.8.0.11.nupkg.sha512" + }, + "Microsoft.Extensions.Options/8.0.2": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", + "path": "microsoft.extensions.options/8.0.2", + "hashPath": "microsoft.extensions.options.8.0.2.nupkg.sha512" + }, + "Microsoft.Extensions.Primitives/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g==", + "path": "microsoft.extensions.primitives/8.0.0", + "hashPath": "microsoft.extensions.primitives.8.0.0.nupkg.sha512" + }, + "Microsoft.Net.Http.Headers/2.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/M0wVg6tJUOHutWD3BMOUVZAioJVXe0tCpFiovzv0T9T12TBf4MnaHP0efO8TCr1a6O9RZgQeZ9Gdark8L9XdA==", + "path": "microsoft.net.http.headers/2.3.0", + "hashPath": "microsoft.net.http.headers.2.3.0.nupkg.sha512" + }, + "RainCrab.Plugins.AspNet/0.1.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-6o4oboIqWXIMEWyW5cVF8dCTLWImyuYjMOqOAWf7WaqdnaEgINZA2SaRQ6AqKvo1/SbVTD3H3n+grcRUAUnlIQ==", + "path": "raincrab.plugins.aspnet/0.1.11", + "hashPath": "raincrab.plugins.aspnet.0.1.11.nupkg.sha512" + }, + "RainCrab.Plugins.Base/0.1.7": { + "type": "package", + "serviceable": true, + "sha512": "sha512-NTQdJyPxDaKKcURU+c625yS+9R0TuNbefXv9TTQ3LhsF+4TCHko0kmn0IOw4HSMuTi+jwdt8tgz2xwl4sgZYoA==", + "path": "raincrab.plugins.base/0.1.7", + "hashPath": "raincrab.plugins.base.0.1.7.nupkg.sha512" + }, + "System.Buffers/4.6.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lN6tZi7Q46zFzAbRYXTIvfXcyvQQgxnY7Xm6C6xQ9784dEL1amjM6S6Iw4ZpsvesAKnRVsM4scrDQaDqSClkjA==", + "path": "system.buffers/4.6.0", + "hashPath": "system.buffers.4.6.0.nupkg.sha512" + }, + "System.Diagnostics.DiagnosticSource/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-vaoWjvkG1aenR2XdjaVivlCV9fADfgyhW5bZtXT23qaEea0lWiUljdQuze4E31vKM7ZWJaSUsbYIKE3rnzfZUg==", + "path": "system.diagnostics.diagnosticsource/8.0.1", + "hashPath": "system.diagnostics.diagnosticsource.8.0.1.nupkg.sha512" + }, + "System.Reflection.Metadata/8.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+4sz5vGHPlo+5NpAxf2IlABnqVvOHOxv17b4dONv4hVwyNeFAeBevT14DIn7X3YWQ+eQFYO3YeTBNCleAblOKA==", + "path": "system.reflection.metadata/8.0.1", + "hashPath": "system.reflection.metadata.8.0.1.nupkg.sha512" + }, + "System.Text.Encodings.Web/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==", + "path": "system.text.encodings.web/8.0.0", + "hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512" + }, + "TestLib.Writer/1.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-+kzeprTBcatAmcrIwJYq8hsuOLlY5JItq1Ri56BmzhLTym9THDYIgrVTv1IMKMI8acDOiKQ0ZYcj1d82P6kceA==", + "path": "testlib.writer/1.0.0", + "hashPath": "testlib.writer.1.0.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin1/Plugin1.dll b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.dll new file mode 100644 index 0000000000000000000000000000000000000000..912b84a1e7c0e9dd8c6b366926f1ef5ed0dc80d6 GIT binary patch literal 4608 zcmeHKUu+yl8UJR_zFe+}u`dwPf|^Yos1u`&&u1r>(lkE%?8L4A#dmR_oD}cfjnCWc z?H;>(iBD7|gtQO|sZ>0)sd(rMC_)0IQXX0a4@IJHl~5%fs8p#BRUddkAQcIa5`N$8 zp6_g@eLx7Q65n~gneXp>-#4=}02lR;kfEXc4f)fw9*N&jq(I(J{`qfwq<7NiOuiz>$_zW>xh0lKV*XbiNRH0+= zyU61Sq7oNkJFF7z0k1fOwq5pVv`&=hk|#i)?V^o9ZUmrzxElyEm1`6?CR^f_a>tqgO?oDq=6B?-Apd6~3czTJdXY{10LeGWM=W(w~GKi_??J z+gsveElJm7cC3$l?X;GngW88;KfR*e(Du_!;1unNeW(KA&Bbx@uV3MDg_m^ZeJTW6UR2Zz2VTSMoVB2v=oo8sl6KQ;n!wVs^g-Yx9RcpAw8AG9&M7>r@HvIQ zsjvwws0I85xOuq-t(7V82r}u%U=+D4UDSiQXLiu@!daj16g>)j|@^pWnr|8(Gg!g3# zHWy%v-V8mVMBTPCbWG`mYadz?-Qev)2T>UXOLntnIca))-mNxm`2o{4KYXx&n2CZde?RWT7ZoOgIN_kn@=7t(|$=jJMd8k(<=ol_EZJU$Ee0+v>1Z@lU zY&xxuAgZF`2Ugj#t)NR<*ivdE$`9uVp=1}?$d-Yu7ES*WMT=-uZJRD$ZP^VOted#5Nm&-G^J0elTa1jSHR?z;-t3jY{Bp?ZEPuS#w-JuqwWC9tG#O zeFJG zD@@C#09 zo2~4T_kXn-*I|^JPKfAWd6-Ypa>C?Ppae!71Y9 zZF?U3lIng1>nGI_qNMk}0w>#EYC9eNZ#eu)AUZ&Fb?ba;i3uBI2cPxMqJ3imNZo?y z8De8VD^$R(y+YHpjL|IK7Ym?gfoCvg_-)T$?uK_WuO>s-pAHH2hEo@5M03Y)I03IF zdGKT5EhypBp*3=q)?sB;gwzDrhuow9dM>CCZuhLhsX$Btv@Gyz_wn?&(iuVC;ctw} zTm!TOY^UI_P7O6j3mKW9q;kK68JqCPe);y#D*bk(d1(1~m+-ueEpctP3+HLut-#KM zWhaj`-Z~?jjpx~exVRF5(sdA%-4)qZ{{~ed<#+TDUVVb*U{g~ToLK|!G>))F>+nWu zpHC?NixHo*WB={=mw iqht4NU5!p0ye6L^(8K>3udDy7K0|T;Kh*z91^x|ayV-33 literal 0 HcmV?d00001 diff --git a/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.json b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.json new file mode 100644 index 0000000..e3a9319 --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.json @@ -0,0 +1,19 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "rollForward": "LatestMinor", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "8.0.0" + } + ], + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.template.json b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.template.json new file mode 100644 index 0000000..2a7fedf --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.runtimeconfig.template.json @@ -0,0 +1,7 @@ +{ + "runtimeOptions": { + "additionalProbingPaths": [ + "../." + ] + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin1/TestLib.Writer.dll b/src/FastBlog.Web/Plugins/Plugin1/TestLib.Writer.dll new file mode 100644 index 0000000000000000000000000000000000000000..36d4c90e06bbeb0ac0374c221468d67bc9f2e5f0 GIT binary patch literal 4096 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 PKLY&1@cZj`F9ZJzBbEA& literal 0 HcmV?d00001 diff --git a/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.json b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.json new file mode 100644 index 0000000..5d64b22 --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.json @@ -0,0 +1,20 @@ +{ + "runtimeOptions": { + "tfm": "net8.0", + "rollForward": "LatestMinor", + "frameworks": [ + { + "name": "Microsoft.NETCore.App", + "version": "8.0.0" + }, + { + "name": "Microsoft.AspNetCore.App", + "version": "8.0.0" + } + ], + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.template.json b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.template.json new file mode 100644 index 0000000..2a7fedf --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.runtimeconfig.template.json @@ -0,0 +1,7 @@ +{ + "runtimeOptions": { + "additionalProbingPaths": [ + "../." + ] + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin2/TestLib.Writer.dll b/src/FastBlog.Web/Plugins/Plugin2/TestLib.Writer.dll new file mode 100644 index 0000000000000000000000000000000000000000..06a06ed824892928ff66a91a4b6eea211dc400de GIT binary patch literal 4096 zcmeHJTWl0n82(Ogw8btGynuKaEDER@OIrm|u%*kTSlZfM!3$bux2N0D*_m}_iu6Tm zjK=t)FD8VPevs^2oD-#G?5S^e*c+ScH1fsJ{TYTch7&$ z|DXSU&YW}hKKu$A0W`5)xB$G*UZBt5OQTs%XKwf~gX3+d*1WHVPOZsLxsg=~gHq^} zt)k=mL2MPY6;At>>s#58oK+4cwB6CszBV;Ix&s(ejre-*)%U92PUA*vsp~zCa@mJ};v3uk|S@EW&Eq9g#sF@VXRYAshrQBd_;n zAir?#QnZzXUlnO3y}L@Vw_|-cW*;vhve+coG;WRzSinI$jKU%*6I&k#l4v_y9rQ7J zJJeo4L5URy*~C_ctq%Ht?RBIXj!0bz5?ceBF=YXtHv>wT{{Xr}YE~N8({=kT*Eg(R zCOz$J&+XZ+QmYc&Wt_F)|rb#*DpmPafEq`UgrZj z%yBGB+PUk2!7TgZq*sdWb}uN97NEM?bv4i?#Cg?&tCE~VPnKC4WlThj(UeMZmIlnJ zq;J7_inTy1!8hPXwG0;3TCfMtsTS_skBQ%c;7<)M8a!+8HDdW@Yr8%|LE zHFd%`Njyny-e6YWsxQb8N|8EEYAZ()slaE=tFVFes3p|*N~i`rYN!`ho}pFAOJOS& z1UGV9wc!l2Sx(%7RmAPoIioJeMuYD%xZmJGgYP%^A%h)*U1EhNiLb=7xV_;T%y8U- zbts}k*;opjzZKX-yc+w6J26gtD_$e+!8^ov;{)OWd_{a8&JySF3-KeweRu*()PTWF zv&p(JjTEFF@^Mtbs%`&!_68Hvp5BJsOcd*~JvQyfZdqf0=*AjZU6?MFoPwwOV{W9v zGf1V`)r#&S5jEo3Exh8nQse zxTZKf?RioW1|tVhZKA3nmK}elHj&oU@ME{&dTv}dJHPODnmj*RB;PLbI*Nzff^C*0 zv?n|-U95|1rYAjJl(ZMfVldHxU5taUDxP(nk{?8|Ta2o#G(tNmiVkx+JmeO2lx_e9 z!)-#6ITxK6BZbH559#@fwnON~7FgU~qZ=Ok@Z6i*hTr~SZk2!T=#6Nylxl6Xpqe>Y zzFf$Rpyp;YWHOo7WA~0fv;52UE##3>={CJyzTJGoRr^DyG936j4i~jq*8Ef$JQXR* zC7<(Fg_ZX3j{HCn>i$aQwzPO#4{f%)XdrXN#r>Fdql)Lu40C(7iiSmrj6z#Hr8kzH zh^5123QM>Zv=eDyjl#7Z?UsRlE9Medo?8f=a3)zN|Z!7U_%!s8S-RXE`5m}OcZVOJ&! z$nEa$zT-|*-R();NlGVIAN4Amo*f2*aXfiX-<;;5CUdQ!O zj*47cZFaqxy>JtanAgZ+GyesS+&R2Uf!X=dm>mFal|_7!lefczeOxQKd{W3Z_Hwk3 zr~Eka4vcX$$d}eI=|SS1$*T(=HU0F5+*P$xKlwQBP3`b%zj*tlEMz%QwCW(F9hdu0 z)25F}1V&`7c_igI>yR69-a$;cfK&pqS9oz+A4Q z?f~tT`P0;n=>_QE&1BX6`Z%kZN{+EF^D(Aq zX(MTe_L59?Vi|R+704P-MUzj3^0j>PX$(Uq0vr2{j6@cSY39^gXJ?<`M|Jw$yr;V^ zHqhe=%1gx)8$M(5>Y}}rKN}O2l@kM4&y`geqQ8={AQi2!HnJim<}2@Gi*4BW8%g=H zTH>#ow@|VQ@;*;${a1O```u>hHcEQ|qnYL_Ca#PA(st;EwP<17^Ys^2tyVK&v#D=C p*DYd%W$prxSz6q|vI4bA*L0-b{}NcqySlRJU-I|AoBvb={sh3*UAzDQ literal 0 HcmV?d00001 diff --git a/src/FastBlog.Web/Plugins/Plugin2/plugin2.manifest.json b/src/FastBlog.Web/Plugins/Plugin2/plugin2.manifest.json new file mode 100644 index 0000000..99f9734 --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin2/plugin2.manifest.json @@ -0,0 +1,6 @@ +{ + "Id": "plugin2", + "Version": "1.0.0", + "Assembly": "Plugin2.dll", + "Name": "Plugin2" +} \ No newline at end of file diff --git a/src/FastBlog.Web/Program.cs b/src/FastBlog.Web/Program.cs index df5cb94..0242051 100644 --- a/src/FastBlog.Web/Program.cs +++ b/src/FastBlog.Web/Program.cs @@ -2,9 +2,13 @@ using FastBlog.Core; using FastBlog.Web; using FastBlog.Web.Middlewares; using Microsoft.AspNetCore.RateLimiting; +using RainCrab.Plugins.AspNet; +using RainCrab.Plugins.AspNet.Extensions; + var builder = WebApplication.CreateBuilder(args); + if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == Environments.Development) builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation(); else @@ -37,8 +41,15 @@ builder.Services.AddRateLimiter(rateLimiterOptions => }; }); -var app = builder.Build(); +WebPluginLoadContext webPluginLoadContext; +await using (var tempServiceProvider = builder.Logging.Services.BuildServiceProvider()) +{ + var logger = tempServiceProvider.GetRequiredService().CreateLogger("PreBuildLogger"); + webPluginLoadContext = await builder.AddWebPlugins(logger, AppContext.BaseDirectory); +} + +var app = builder.Build(); if (!app.Environment.IsDevelopment()) { @@ -62,6 +73,12 @@ app.MapControllerRoute( await app.Services.MigrateUp(app.Configuration); -app.Run(); +await app.RunAsync(); + +foreach (IWebPlugin plugin in webPluginLoadContext.LoadedPlugins) +{ + await plugin.ShutdownAsync(webPluginLoadContext); +} + return; \ No newline at end of file