🚀 Welcome to MDriven Learn –  MDriven is now on Discord!  Don’t miss the latest Release Notes.
Changelog-Framework


Release Notes
MDRIVEN: CHANGELOG - FRAMEWORK
All the latest MDriven Fixes and Updates
ChangeLog - MDriven Framework

December 2025

  • Revision 17065 (Modified on 2025-12-02): SyncHandledDeadlock detected - multiple threads Submit updates while multiple requestChanges - use of double locks (SyncRoot and this) could lead to interlock situation leading to deadlocks - simplified to the single SyncRoot lock

November 2025

  • Revision 17060 (Modified on 2025-11-30): AsyncThread deadlock case understood and prevented related to PSEval use
  • Revision 17059 (Modified on 2025-11-30): CascadeFetch improved for link objects
  • Revision 17058 (Modified on 2025-11-27): Adding query operator int CascadeFetch() Follows composite links and make sure everything is loaded - good to run prior to delete as query to avoid rouge fetching during delete - returns number of objects seen
  • Revision 17051 (Modified on 2025-11-20): UsedBy/ChangedBy/Expressions grouped together in menu since they all focus on cross reference and Expression access UsedBy/ChangedBy/Expressions made available from ocl editor tree, and ocl edit text
  • Revision 17049 (Modified on 2025-11-18): MDrivenServer HandleViewModelQueryplanFetchCondition - in here queryplanner used to pump the fetching 5 times - so that if an object of class X loaded more objects of Class X - them to were handled according to the same recipe. This is helpful for self recursing expressions - but really bad/dangerous if the a load produce objects of Class X that should not follow the same recipe (to the same reason for fetch - and thus not necessarily the same associations needed) We discovered cases where this 5 time pumping managed to pull 1000 of objects. Pumping must be done at client level where we also know the reason for fetch - and we do pumping here as well. /* There is a special case when reaching for a LinkClass from both directions Class1-----*Class3*-----Class2 * when fetch both the linkclass and the far end Class1---*Class3 + Class1---*Class2 AND class2---*Class3 + class2----*Class1 * There is a problem that we may interpret the resulting Class2's from Class1---*Class2 as being Class2's in class2----*Class1 AND the other way around, Class1's from far end of Class2---*Class1 as being Class1's in Class1---*Class2 * And if so we fetch too much -> way too much */ This checkin will immunize wrongful server pump fetch like above - but may produce a few more server hops for true recursions that benefited from server pumping before
  • Revision 17048 (Modified on 2025-11-18): Consilidating where we construct the wiki links for operators. Adding wiki link for cursor node in ocleditor to enable access to +-/ etc Adding resolve of +-/ etc to valid known wiki links
  • Revision 17047 (Modified on 2025-11-17): When having number databind with NumberFormat in AngularJS - null did not render - instead binding exp showed - fixed by replacing value with ng-attr-value
  • Revision 17044 (Modified on 2025-11-17): Fixing issue with disabled combobox not showing the hint - and that makes it hard to see the value without unlocking
  • Revision 17042 (Modified on 2025-11-17): OCLEditor tabs improved
  • Revision 17039 (Modified on 2025-11-14): Major change to how the OCL-Editor operates - the aim has been to move away from a scattered logic that instructs the editor on context, returntype, variables etc - to a centralised way that enables expression refresh and thus expression history in the ocleditor - to enable swift shifting between expressions you work on
  • Revision 17037 (Modified on 2025-11-14): Major change to how the OCL-Editor operates - the aim has been to move away from a scattered logic that instructs the editor on context, returntype, variables etc - to a centralised way that enables expression refresh and thus expression history in the ocleditor - to enable swift shifting between expressions you work on
  • Revision 17035 (Modified on 2025-11-13): Package version number missing from Postgres and sqlite - fixed
  • Revision 17033 (Modified on 2025-11-13): MySql package was mising version - fixed
  • Revision 17032 (Modified on 2025-11-13): Package version number missing from Postgres and sqlite - fixed
  • Revision 17030 (Modified on 2025-11-11): Updates to get Automation to work when UI is never shown - issues with Dispatcher.Yield
  • Revision 17029 (Modified on 2025-11-10): Issue with illegal MetricConversion Tagged values - now these are ignored and fallback to presentation unit
  • Revision 17027 (Modified on 2025-11-09): Issues with Scroll in OclEditorKind History ViewModel list - mark the current
  • Revision 17026 (Modified on 2025-11-08):
  • Revision 17025 (Modified on 2025-11-08): Changes to OCLEditor - replaced the underlying edit control (Richtextbox) due to being fed up with all the issues
  • Revision 17024 (Modified on 2025-11-08): Changes to OCLEditor - replaced the underlying edit control (Richtextbox) due to being fed up with all the issues
  • Revision 17023 (Modified on 2025-11-06): VS Automation Adapting ContinousIntegration as described https://wiki.mdriven.net/Documentation:ContinuousIntegration
  • Revision 17021 (Modified on 2025-11-06): VS Automation Adapting ContinousIntegration as described https://wiki.mdriven.net/Documentation:ContinuousIntegration
  • Revision 17017 (Modified on 2025-11-04): Debugger step had a tendency to deadlock app after usage - this was due to a bad transition between sync and async in EcoSpace - fixed
  • Revision 17016 (Modified on 2025-11-04): Better logging during automation
  • Revision 17014 (Modified on 2025-11-04): Issues with Automation fixed
  • Revision 17011 (Modified on 2025-11-03): When ComboBox displays are tight we now show a tooltip with the selected value (title is set) Also - but only in blazor - we add a transparent text above combo so that result is found by browser ctrl+F search

October 2025

  • Revision 17004 (Modified on 2025-10-29):
  • Revision 17002 (Modified on 2025-10-29): The Turnkey/GetImage is now better to return a correct filename-given download even if the filename has characters that needs escaping
  • Revision 17001 (Modified on 2025-10-29): Changes to if we stop OclPS due to finding out that self is new - before we did - but this limits PSEval that is very generic - its sure offers you to use self - but you may not actually do it. We remove the check on self isnew
  • Revision 16997 (Modified on 2025-10-29): MDrivenServer - blazor UI updates
  • Revision 16996 (Modified on 2025-10-28): SysDynamicView had an issue when constructing dynamic columns with expressions that was xml sensitive - fixed
  • Revision 16995 (Modified on 2025-10-28): SysDynamicView had an issue when constructing dynamic columns with expressions that was xml sensitive - fixed
  • Revision 16994 (Modified on 2025-10-28): SysDebugger - when doing OclPS the debugger now checks the resulting type on the expression and decides if to use GetValue or Execute so that you do things like Class.allinstances->size and press OCLPS
  • Revision 16988 (Modified on 2025-10-23): On class Action new taggedvalue : IgnoreOptOut=true tagged value was added to allow for SysDebuggerAutoform from all objects - even when actions are opted out by default
  • Revision 16986 (Modified on 2025-10-23): /debug in angular was broken by changes to MiniBlazor and having actions as VMClass columns. Fixed
  • Revision 16984 (Modified on 2025-10-22): MVC way to get downloaded content is Turnkey/GetImage and we had - to seperate id, attribute, contenttype and filename. Turns out that was really bad choice of seperator so we now also allow for = as separator. Wiki updated https://wiki.mdriven.net/Documentation:MVC_GetImage
  • Revision 16981 (Modified on 2025-10-22): AutoForms has extra parameter to send in accessgroups
  • Revision 16980 (Modified on 2025-10-21): SysDebugger issue that SysDynamicViews did not have have any AccessGroups; fixed by assigning the accessgroups from the View calling navigate to bring the dynamic view up - this will be the correct accessgroup in the context - usually the debugger. Prior to this change there was a risk that another user could get access to AutoForm if she knew the url.
  • Revision 16979 (Modified on 2025-10-20): SysDebugger changes caused an issue in QueryPlanner - fixed
  • Revision 16978 (Modified on 2025-10-20): QueryPlanForSpecificType checked DefaultStringRep for subclasses - but this is not meaningful if the class is the defaultSuperClass or has more than 30 subclasses (the aim is to reduce rouge questions)
  • Revision 16975 (Modified on 2025-10-19):
  • Revision 16973 (Modified on 2025-10-19):
  • Revision 16972 (Modified on 2025-10-19):
  • Revision 16971 (Modified on 2025-10-19): Work on MDriven.MiniBlazor - a strategy that to bind Blazor serverSide straight to VMClass with the direct aim to make MDrivenServer UI more modern
  • Revision 16970 (Modified on 2025-10-19): BREAKING CHANGE: The VMClass Bagage Dictionary shifted from string,string to string,object /// Baggage was initially added to hold previous values of vCurrent variables on postback from MVC public Dictionary<string, object> Baggage New mistake had knocked out Create New and Delete buttons from debugger autoform seekers - fixed
  • Revision 16969 (Modified on 2025-10-18): SysDynamicView and SysDebugger pattern supported by Turnkey - see wiki
  • Revision 16968 (Modified on 2025-10-16):
  • Revision 16966 (Modified on 2025-10-14): Function to export turnkey search grids to file - now the headers alone are sent of the result is empty - this is to make it easier to get a template for import. Also _ReadOnly, _Visible, _Style columns are filtered away (as they are in the UI)
  • Revision 16959 (Modified on 2025-10-13): MetricNotImperial has been refined into MetricNotImperial_Area, MetricNotImperial_Weight. MetricNotImperial_Temperature, MetricNotImperial_Volume, MetricNotImperial_Velocity
  • Revision 16957 (Modified on 2025-10-13): Issues with system.buffers in VS
  • Revision 16946 (Modified on 2025-10-12): <PackageReference Include="System.ClientModel" Version="1.6.0" /> <PackageReference Include="System.Text.Json" Version="8.0.6" /> <PackageReference Include="Azure.Identity" Version="1.14.2" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions"> <Version>8.0.3</Version> <PackageReference Include="Azure.Core" Version="1.47.2" />
  • Revision 16945 (Modified on 2025-10-12): Issues with MDrivenServer for .net48 resolved Changing projects from old nuget to PackageReference netStandard : net48 , removing .net472 Nuget: <PackageReference Include="System.Buffers" Version="4.6.1" /> <PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" /> <PackageReference Include="System.Memory" Version="4.6.3" /> <PackageReference Include="Azure.Identity" Version="1.17.0" /> <PackageReference Include="System.Buffers"><Version>4.6.1</Version> <PackageReference Include="System.Memory"><Version>4.6.3</Version> <PackageReference Include="Azure.Core"><Version>1.49.0</Version> <PackageReference Include="Azure.Identity"><Version>1.17.0</Version> <PackageReference Include="Azure.ResourceManager.AppService"><Version>1.4.1</Version> <PackageReference Include="Azure.ResourceManager.Resources"><Version>1.11.1</Version> <PackageReference Include="Azure.Storage.Blobs"><Version>12.25.1</Version> <PackageReference Include="System.Diagnostics.DiagnosticSource" Version="7.0.2" />
  • Revision 16938 (Modified on 2025-10-08): More logging for sign in Issue with BlazorComp download url when app is in subfolder fixed Adding js function ReadFromClipbookMDriven to match WriteToClipbookMDriven
  • Revision 16936 (Modified on 2025-10-07): Extended logging for login
  • Revision 16935 (Modified on 2025-10-07): Extended logging for external login issues
  • Revision 16926 (Modified on 2025-10-03): The GraphAPI will now also set the Modified:DateTime? of SysGraphAPIResultRow if present
  • Revision 16924 (Modified on 2025-10-01): Increased to save 50 log files instead of 10 Removed excessive logging. Hunted and cure one infinite loop issue removing use of System.Drawing.Common

September 2025

  • Revision 16922 (Modified on 2025-09-29): MDrivenServer Ability to let special TWOFACTOR code bypass TWOFACTOR model upload to enable automation and scripted deploy MDrivenFramework extended to allow CodeGen,Build,Upload model from script as described here: https://wiki.mdriven.net/Documentation:ContinuousIntegration
  • Revision 16915 (Modified on 2025-09-24): RTCreate of ViewModel now checks for self referencing (recursion) if nestings - which will break renderers hard - it is now filtered away
  • Revision 16911 (Modified on 2025-09-22): Nugets <PackageReference Include="Microsoft.AspNetCore.Localization" Version="2.3.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.3.0" />
  • Revision 16909 (Modified on 2025-09-22): MDriven.ASPNETIdentity.core -> net8 MDriven.MVC.Core -> net8 MDriven.Persistence.WebApi.Core -> net8 Upgraded nugets: <PackageReference Include="Microsoft.AspNetCore.Http" Version="2.3.0" /> <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.3.1" /> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.3.0" /> <PackageReference Include="Microsoft.AspNetCore.Owin" Version="8.0.20" /> <PackageReference Include="Microsoft.Extensions.Identity.Core" Version="8.0.20" /> <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="8.0.20" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" /> <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="8.14.0" /> <PackageReference Include="Microsoft.IdentityModel.Tokens.Saml" Version="8.14.0" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
  • Revision 16906 (Modified on 2025-09-22): Nuget updates for everything .net8+ Microsoft.Extensions.Logging.Abstractions" Version="8.0.3" updated from 8.0.2 <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="8.0.20" /> updated from 8.0.11 <PackageReference Include="Microsoft.AspNetCore.SignalR.Client.Core" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.SignalR.Common" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Components" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Components.QuickGrid" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.Facebook" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.Google" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.20" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.20" />
  • Revision 16896 (Modified on 2025-09-20): Rename, Usage functions missed preconditions for methods and triggers - fixed
  • Revision 16893 (Modified on 2025-09-19): Further deadlock issue - now solved
  • Revision 16892 (Modified on 2025-09-19): Issue with Copy/Paste attributes in stable diagrams - new value does not show - Fixed issue Issues with deadlock in wpf due to async-force when using PSEval-operations from ocl. Rewritten.
  • Revision 16890 (Modified on 2025-09-17): Export items to file available from searchgrids had stopped working due to MaxFetch init to 0 Blazor StaticText and Edit gets info on IsNumeric and also a invariant culture value as attribute in order to sanely handle summation of cells in datagrids. Blazor cell select now shows a Sum/Average/Count of selected numeric cells
  • Revision 16888 (Modified on 2025-09-15): PC structure display in WPF viewModelEditor improvements with DD
  • Revision 16886 (Modified on 2025-09-14): PC structure visualization helper in WPFViewModel Editor
  • Revision 16881 (Modified on 2025-09-12): PlacingContainer conversion helper improvements
  • Revision 16878 (Modified on 2025-09-11): Added new Grid to PlacingContainer transition tool in MDrivenDesigner Changes to WPF viewModelRendering to enable the new Grid to PlacingContainer transition tool in MDrivenDesigner
  • Revision 16877 (Modified on 2025-09-10): Issue that made MDrivenServer say System.InvalidCastException: Invalid cast from 'System.Int64' to 'AppCompleteGeneric.ConnectionType'. is fixed, issue came from us now being able to store tuples in variables and roundtrip of mvc was misapplied
  • Revision 16870 (Modified on 2025-09-10): The StringFormat in wpf/blazor to default 2 decimals had issues Placeholder in blazor had issues
  • Revision 16869 (Modified on 2025-09-10): The angularjs numnerhash filter returned nan when null - changing to The numberformatted strings in angularjs did not get the placeholder text if set
  • Revision 16868 (Modified on 2025-09-10): If a packaged is used but not included in the ecospace the error was just Model not Ecofied - and that made it hard to follow - error improved Default stringformat is now also applied to integer types in order to give thousand separator
  • Revision 16866 (Modified on 2025-09-09): Angular debug view - better number and date format
  • Revision 16864 (Modified on 2025-09-09): Updates due to usermanager interface changes
  • Revision 16863 (Modified on 2025-09-09): public interface IUserMDrivenManager { IUserMDriven CreateNew(IEcoServiceProvider sp,string userNameToActAsId); This is changed from IUserMDriven CreateNew(IEcoServiceProvider sp) We discovered that SysUser could be doubled due to id and username difference - and this causes downstream problems with login tokens. The issue is that .net core UserManager has interfaces to locate on user id AND on username - and these really must be the same to ensure none doubles going forward. The definition to the SysUser is that UserName == Id and should be unique - Normally (login flow, Oauth-flow) this is the user email
  • Revision 16862 (Modified on 2025-09-08): Updates to SS-Blazor, Updates to Culture settings in session and client
  • Revision 16861 (Modified on 2025-09-08): Ocl issues when result was constant - but not owned (like this 'let x=true in (1.23)') - then we got the result with EnsureSpanFetch and threw it away - then we gave null from the main render - fixed
  • Revision 16859 (Modified on 2025-09-07): LiveEdit now has a BlazorEdit option - this uses a different rendering model - and is able to change the page without a full page refresh - the aim is to provide a smoother liveedit...
  • Revision 16858 (Modified on 2025-09-05): Metric - use of presentation type did not work on viewmodelcolumns alone - Fixed issue Column filtering did not work on combos - fixed
  • Revision 16852 (Modified on 2025-09-03): Deprecating the StringFormatRazor in favor for StringFormat, updated the wiki to reflect (StringFormatRazor will continue to be checked if StringFormat is empty)
  • Revision 16850 (Modified on 2025-09-02): null check
  • Revision 16848 (Modified on 2025-09-02): MetricImperial transforms added. Now available are: MetricImperial_GramOunce MetricImperial_MillimeterInch MetricImperial_MilliliterFluidOunce MetricImperial_CelsiusFahrenheit MetricImperial_SquareKilometersSquareMiles MetricImperial_SquareMetersSquareFeet MetricImperial_SquareCentimetersSquareInches MetricImperial_KilometersPerHourMilesPerHour MetricImperial_MetersPerSecondFeetPerSecond
  • Revision 16847 (Modified on 2025-09-01): MetricImperial work. Adding auto StringFormat on decimals for AngularJS and Blazor - will default to IMDrivenUITranslation.EffectiveDefaultDecimalDisplay that defaults to 2 but can be set in property DefaultDecimalDisplay:int on SysCultureSettingsSingleton

August 2025

  • Revision 16845 (Modified on 2025-08-28): Preparing for StringFormat for numbers and dates having default values that can depend on user set culture Blazor serverside issues with ShouldRenderFilter that stopped combo lists to correctly update; fixed
  • Revision 16844 (Modified on 2025-08-28): When Culturesettings change we now reload page automatically
  • Revision 16843 (Modified on 2025-08-27): Mistake fixed
  • Revision 16841 (Modified on 2025-08-27): LockIssues connected to taking care of singleton load in Turnkey Fixed issue IMDrivenUITranslation extended with EffectiveLanguage - enabling setting culture in data/userprofile instead of trusting browser Also adding cache-tag for MetricNotImperial since this new setting will change PresentationUnit in html we need to cache both metric and imperial per language New functionality on IMDrivenUITranslation to convert back and forth in UI for metric and imperial Triggered by tagged value: "MetricImperial" having one of these values: "GramOunce" "MillimeterInch" "MilliliterFluidOunce" (this is US fluid ounce - not imperial)
  • Revision 16840 (Modified on 2025-08-25): Yesterday I wrote: WPF: Something fishy when having tuples in a grid ... ...All of this was due to the fact that Tuples HashCode was depending its values - and changing hashcode breaks collectionview and everything in .net UI and Dictionaries. Tuples has been rewritten to have stable hash - but that broke GroupBy - GroupBy has been rewritten for tuple stable hash
  • Revision 16839 (Modified on 2025-08-25): EnsureRange on a null tuple gave nullref exception - fixed
  • Revision 16837 (Modified on 2025-08-22): WPF: Something fishy when having tuples in a grid - then having a detail grid under it - seems like if one detail is deleted the currency managers CollectionView is thrown of target and stops responding to changes I really do not understand the root cause - nothing helps only to completly resetting the handle with enable/disable when this is discovered... (Maybe descriptor types changes for tuples? Maybe revisit if new info emerge)
  • Revision 16836 (Modified on 2025-08-22): Turnkey: Tuples in tables - that has child tables; did not work due to VMClassId not handled on tuples - several changes including changing ToString of tuple to return HashCode Several issues with handling tuples as vCurrent_ vars in Turnkey fixed Also discovered issue with Nestings using derived type from owning column - the order of creation could be wrong if the expression was depending on a vCurrent of a nesting that laid after it in creation. Fixed.
  • Revision 16829 (Modified on 2025-08-19): Fredrik S discovered that RenderedByAction on checkbox in grid in wpf had stopped working - found issue (element was variable that was null - and logic was tricked by thinking that current was known when it was not - suspect the summer changes for updating the selected in WPF UI when variable is set) Fixed.
  • Revision 16827 (Modified on 2025-08-18): DefaultEcoSPace ensure its singletons on activate - but this is also baseclass for TempEcospace used by XmlLoading etc - and THAT should not ensure singletons, since they leave unwanted residues. To mitigate ShouldEnsureSingletonsOnActivate was introduced and overriden in TempEcoSpace to return false
  • Revision 16825 (Modified on 2025-08-14): Fixes to BlazorPivot
  • Revision 16824 (Modified on 2025-08-14): MDrivenDesigner now also handles adding components from ext_componentsrazor Switching the BLAZOR TV on ViewModel to bring up Blazor serverside instead of webassembly Changes to how ext_componentsrazor load scripts - we do NOT load anything ahead of time - we wait for component to do its own thing - this avoid bloating and general script-hell
  • Revision 16813 (Modified on 2025-08-11): Changed Gantt DateScaler to placing container control. Changed ThreeJS to https://cdn.skypack.dev
  • Revision 16807 (Modified on 2025-08-02): Several issues with assign and compare of tuples addressed and Fixed Added IActionLanguageService.IsCurrentlyInActionEvaluation Reveals if this thread is currently in evaluation of EAL Added ViewModelClass.ActionToUpdateUITovCurrent that is now set by WPF DataGrids - this solves long standing issue that vCurrent_ updates from code did not update UI in WPF but did in web