Changelog

A comprehensive .NET library for dynamic plugin loading, execution, and management with enhanced stability, type safety, and security features.

Changelog

All notable changes to the RuntimePluggableClassFactory project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[2.1.0] - 2025-11-03

Added - Async Module-Based Plugin Loading Support

Expanded Async Loading Capabilities

Module Identification Types (Already Public, Now Documented)

Changed

Use Cases Enabled

[2.0.0] - 2025-07-24

Added - TDS Implementation Complete

Dynamic Plugin Loading/Unloading

Enhanced Stability & Error Handling

Type Safety

Security Hardening

Comprehensive Testing

Documentation

Changed

Breaking Changes

  1. Assembly Loading: Direct Assembly.LoadFrom() replaced with AssemblyLoadContext
  2. Plugin Discovery: Plugin enumeration now async (ListAllPossiblePluginsAsync())
  3. Error Handling: Exceptions now wrapped in events for better error management
  4. Security: Plugin loading now includes security validation by default
  5. Target Framework: Upgraded from .NET Standard 2.0 to .NET 8.0

Performance Improvements

Migration Guide

From v1.x to v2.0

  1. Plugin Interfaces: Existing IPluginClass implementations remain compatible
  2. Plugin Loading: Replace direct assembly loading with FilePluginLoader<T>
  3. Error Handling: Subscribe to error events for comprehensive error management
  4. Security: Add security validation to plugin loading process
  5. Type Safety: Optionally migrate to ITypedPluginClass<TInput, TOutput> for type safety

Example Migration

Before (v1.x):

var pluginLoader = new FilePluginLoader<IMyPlugin>(pluginDirectory);
var factory = new PluginClassFactory<IMyPlugin>(pluginLoader);

After (v2.0):

var securityValidator = new DefaultPluginSecurityValidator(PluginSecuritySettings.CreateDefault());
var pluginLoader = new FilePluginLoader<IMyPlugin>(pluginDirectory, securityValidator);
var factory = new PluginClassFactory<IMyPlugin>(pluginLoader);

// Subscribe to error events
factory.PluginInstantiationError += (sender, e) => Console.WriteLine($"Plugin error: {e.Exception.Message}");

// Use type-safe factory (optional)
var typedFactory = new TypedPluginClassFactory<IMyTypedPlugin, MyInput, MyOutput>(pluginLoader);

[1.0.7] - 2020-11-07

Added

Features


Version Numbering

Support

For questions, issues, or support: