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