🚀 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 17108 (Modified on 2025-12-30): Interface approach solution to design double load problem tested - this will not fully solve the problem (winforms designers will generate code but not able to load code -> AddRange not found issue). Next step would be to create separate VSIX versions of assemblies to make VSIX-Project confusion impossible
  • Revision 17107 (Modified on 2025-12-25): Cleaning away legacy packages.config files in order to move ahead with vs2026
  • Revision 17098 (Modified on 2025-12-17): Issues in new OCL editor when mixing actions and ocl in tabs tree did not follow - fixed Issues with the ViewMOdel variable dialog - it was sluggish and cumbersome to choose type or collection - now you type the type name Inspiration and lift UI - continued The offer to create missing variable straight in the OCLEditor had disappeared - now its back Turnkey blazor image and svg - now follows how angular pads them in a div and set same classes The theme color --base-fg-color was none existent - added it to Turnkey and wiki
  • Revision 17093 (Modified on 2025-12-17): SearchGrid when it has zero results - only show when search return zero
  • Revision 17089 (Modified on 2025-12-16): A new image is displayed in Turnkey SearchGrid when it has zero results: content/icons/tkSearchNoRecords.svg - swap this file to you liking (by providing an override in assetstk)
  • Revision 17087 (Modified on 2025-12-15): Baseline css style was misspelled - Fixed InspirationAndLift functionality continued
  • Revision 17086 (Modified on 2025-12-15): Debugger , list all operators - had lost the link to wiki, its back Issue with enum when nullable or when having a illegal value it could not assign a new value; fixed Better helper text on operators using .net : "calls through to .net" instead of "calls through to clr"
  • Revision 17079 (Modified on 2025-12-09): AbstractAction - now has has OpenInNewTab option that will do what it says
  • Revision 17073 (Modified on 2025-12-04): Null ref error when sending null in expression to parser - fixed
  • Revision 17072 (Modified on 2025-12-04): Unfortunate nullref exception in wpf ocleditor if not using the GetExtraDesignerFunctionsForOclEditor (like in integrated runtime debugger) - fixed
  • Revision 17070 (Modified on 2025-12-03): When uploading files with multipart content you can give filename, and now (new) you can also give content type - as described here https://wiki.mdriven.net/Documentation:OCLOperators_RestPost
  • Revision 17068 (Modified on 2025-12-03): ->asset when loading and types is not yet available the operator broke will null exceptions - fixed
  • 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