- WriteInitLogs now uses ILoggerFactory to flush all InitLogger
categories with their original category name instead of only
flushing AbpApplicationBase
- Add CategoryName to AbpInitLogEntry, recorded automatically by
DefaultInitLogger<T> using typeof(T).FullName
- Add GetAllEntries/ClearAllEntries to IInitLoggerFactory interface
- Add GetReferencedAssemblies filter to skip non-ABP assemblies
- Handle ReflectionTypeLoadException separately from other exceptions
- Add CategoryName null/empty fallback in WriteInitLogs
- Skip DisablePropertyInjection types from orphaned module detection
When a type's assembly contains an ABP module but is not part of the
module dependency chain, Autofac's property injection is silently
skipped. This causes LazyServiceProvider and other injected properties
to remain null, leading to NullReferenceException at runtime.
This change detects the misconfiguration at startup and logs a warning
with the affected assembly name, module type, and a fix suggestion.
- Upgrade Autofac from 8.4.0 to 9.1.0
- Upgrade Autofac.Extensions.DependencyInjection from 10.0.0 to 11.0.0
- Upgrade Microsoft.Bcl.AsyncInterfaces from 10.0.2 to 10.0.4
- Remove AnyKeyRegistrationSource (now native in Autofac 9.1.0)
- Add MSDI KeyedService.AnyKey to Autofac KeyedService.AnyKey translation
- Use Parameters.KeyedServiceKey<object>() for keyed factory key retrieval
- Add ExternallyOwned() to instance registrations
- Add unit tests for keyed services and AnyKey support
* Fix stdout/stderr deadlock in CmdHelper.RunCmdAndGetOutput
Read stdout and stderr concurrently to prevent pipe buffer deadlock.
The sequential ReadToEnd() calls caused a hang when child processes
(e.g. dotnet build) produced enough stderr output to fill the OS
pipe buffer (~4KB on Windows), since the parent blocked on stdout
while the child blocked on stderr.
Made-with: Cursor
* Simplify Task.WhenAll result handling per review
Made-with: Cursor
* Add test for CmdHelper to prevent stdout/stderr deadlock
* Reduce timeout in deadlock test for CmdHelper to 10 seconds
---------
Co-authored-by: maliming <malimings@gmail.com>
Update .gitignore to exclude **/.abpstudio/** (and normalize newline for an existing entry). Add an "id" field to framework/Volo.Abp.abpsln (9f9e3d5f-6a9a-4b00-ac5a-746c65981918) to record the solution identifier.
- Remove "Unknown event name" exception from all providers and LocalEventBus
to match typed PublishAsync behavior (no handler = silent, not exception)
- Use ABP's IJsonSerializer instead of System.Text.Json for ConvertDynamicEventData
to respect configured JSON serialization options
- Fix Hangfire/Quartz UpdateScheduleAsync to operate directly on persistent
scheduler state without checking the in-memory registry, consistent with
the RemoveAsync fix; this allows updating schedules after restart
- Revert TickerQ IsRegistered to return false instead of throwing;
a boolean query method should not throw exceptions
- Update docs: note that UpdateScheduleAsync works after restart for
persistent providers