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 0000000..912b84a Binary files /dev/null and b/src/FastBlog.Web/Plugins/Plugin1/Plugin1.dll differ 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 0000000..36d4c90 Binary files /dev/null and b/src/FastBlog.Web/Plugins/Plugin1/TestLib.Writer.dll differ diff --git a/src/FastBlog.Web/Plugins/Plugin1/plugin1.manifest.json b/src/FastBlog.Web/Plugins/Plugin1/plugin1.manifest.json new file mode 100644 index 0000000..e0ed235 --- /dev/null +++ b/src/FastBlog.Web/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/src/FastBlog.Web/Plugins/Plugin2/Plugin2.deps.json b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.deps.json new file mode 100644 index 0000000..67a00a9 --- /dev/null +++ b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.deps.json @@ -0,0 +1,439 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "Plugin2/1.0.0": { + "dependencies": { + "RainCrab.Plugins.AspNet": "0.1.11", + "TestLib.Writer": "2.0.0" + }, + "runtime": { + "Plugin2.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/2.0.0": { + "runtime": { + "lib/net8.0/TestLib.Writer.dll": { + "assemblyVersion": "2.0.0.0", + "fileVersion": "2.0.0.0" + } + } + } + } + }, + "libraries": { + "Plugin2/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/2.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JKT74Y66dwgCtTEqILMfZW8VMJsQFTFyaf+br9O+kRVqqcGvXyFcCUeZoq08o0r83RHYcZcbltisApBULdN4mQ==", + "path": "testlib.writer/2.0.0", + "hashPath": "testlib.writer.2.0.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/src/FastBlog.Web/Plugins/Plugin2/Plugin2.dll b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.dll new file mode 100644 index 0000000..abaa61c Binary files /dev/null and b/src/FastBlog.Web/Plugins/Plugin2/Plugin2.dll differ 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 0000000..06a06ed Binary files /dev/null and b/src/FastBlog.Web/Plugins/Plugin2/TestLib.Writer.dll differ 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