A .NET library for dynamically loading assemblies as plugins with dependency isolation and type sharing.
DotNetCorePlugins is a .NET library that enables dynamic loading of .NET assemblies as plugins into a host application. It solves the problem of extending applications with modular components while managing dependencies and ensuring type compatibility across plugin boundaries. The library provides APIs for assembly isolation, type sharing, and hot reload capabilities.
Developers building extensible .NET applications, such as plugin-based systems, modular architectures, or applications requiring runtime loading of external components.
Developers choose DotNetCorePlugins for its fine-grained control over assembly isolation and type sharing, which prevents dependency conflicts and enables safe interaction between plugins and the host. It also supports advanced features like hot reload and seamless integration with ASP.NET Core.
.NET Core library for dynamically loading code
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Prevents dependency conflicts by loading each plugin with its own set of assemblies, ensuring plugins don't interfere with each other or the host, as highlighted in the key features.
Allows fine-grained specification of shared types to enable safe interaction across plugin boundaries, with detailed diagrams in the README explaining how it unifies versions.
Enables runtime unloading and reloading of plugins using the isUnloadable flag, facilitating dynamic updates without restarting the host application.
Includes a separate NuGet package for loading MVC controllers and Razor Pages from plugins, simplifying extensibility in web applications with dedicated APIs.
Provides APIs like EnterContextualReflection to set ambient context, ensuring reflection calls load correct assemblies and avoid common pitfalls.
Requires setting up multiple projects (host, plugin, contracts) and adhering to specific directory conventions, which increases initial setup time and effort, as noted in the usage examples.
Version 2.0+ only supports .NET 8, forcing teams on older versions to use deprecated 1.* releases with potential bugs and lack of updates, as mentioned in the README note.
Focuses on low-level assembly loading without built-in plugin management features like versioning, discovery, or lifecycle handling, requiring additional custom code.
While contextual reflection is supported, improper usage can lead to assembly loading errors, necessitating careful implementation and testing, as cautioned in the documentation.