A .NET CMS / content framework I wrote between 2007 and 2012. It is a class library that sits between a web front end and a MySQL database and models a site's content as objects: sites, pages, modules, documents, users, groups, and roles. The newest source in the repo is version 4.1 (the assembly is stamped "LiquidCore 4", copyright 2012).
This is old code. It targets .NET Framework 2.0/3.5 and the Visual Studio 2008 solution format, so it will not build with modern dotnet on its own. Treat it as an archive of how I was building content systems back then, not as something you can dotnet run today.
The core is a small domain layer. You work with content as C# objects and call Save(), and the framework persists them to MySQL. From LiquidCoreTest/Program.cs, the usage looks like this:
LiquidCore.Site site = new LiquidCore.Site();
site.Title = "TestSite1";
site.Save();
LiquidCore.Sites sites = new LiquidCore.Sites();
foreach (LiquidCore.Site s in sites)
Console.WriteLine(s.Title);DomainObject (in LiquidCore.CoreLib) is the abstract base for persisted objects and tracks object state through a DomainObjectState enum. On top of that sit the content types and an authorization model.
The database schema (Database.sql) defines the full data model. The main content tables:
sit_sites,pag_pages,mod_modules,mde_moduledefinitions— sites, pages, and the modules placed on themdoc_documents— documentsobd_objectdata— generic object data storageusr_users,grp_groups,rol_roles,ust_usertypes— identity- A set of
authorized*join tables (apg_*,apr_*,amg_*,amr_*,asg_*,asr_*,adg_*,adr_*,atg_*,atr_*) wiring pages, modules, sites, documents, and tasks to groups and roles lng_language,sta_status— lookup tables
There is also a module aggregation feature: when a module is created, a row goes into an aggregation table so the same module can be reused across several pages. ToDo.txt documents this and is in Swedish.
RSS output is handled by RssBuilder.cs / RssConfigurator.cs, which turn a DataSet/DataTable into an RSS 2.0 XML document. That part is adapted from Felipe Sabino's SimpleRSSBuilder on CodeProject (credited in the source).
- C# on .NET Framework 2.0 / 3.5
- MySQL via
MySql.Data(an old 1.0.x version is checked in) ICSharpCode.SharpZipLibfor compression- Visual Studio 2008 (solution format version 10.00)
- Data access goes through a separate
iCDataHandlerlibrary (namespaceiConsulting.iCDataHandler), which also includes aclsCryptohelper
The repo holds a few overlapping snapshots, which is what happens when you commit a working folder years later.
LiquidCore1.0/— the canonical, newest source (version 4.1, ~21k lines inLiquidCore.cs). TheLiquidCoreclass library plus its SQL scripts.LiquidCore/application/— an older 2008-era snapshot of the same library, plusLiquidCoreTest, a console harness that exercises the API.iCDataHandler/— the data-access library and its.sln.ConsoleApplication1/— a near-empty console project (RXServer.csplus an emptyMain).*.sqlfiles — schema (Database.sql), stored-procedure scripts (sp_implementation*.sql), and fixes (sp_fix2.sql,rxdbfix.sql).
You will also find Backup/, _sgbak/, obj/, and bin/ folders, compiled DLLs/PDBs, and a couple of "conflicted copy" files from 2012. Those are build output and version-control leftovers, not part of the design.
If you want to open it, you need the right vintage of tools:
- Visual Studio 2008 (or a later VS with .NET Framework 2.0/3.5 targeting packs installed)
- A MySQL server, with the schema from
Database.sqland thesp_implementation*.sqlscripts loaded - The connection details wired up the way
iCDataHandlerexpects (the project references a.dllby a hardcoded absoluteHintPath, so references will need fixing on any machine that is not the original)
I have not tried to port it to a current .NET. The HintPath references and the .NET 2.0 target mean a straight dotnet build will not work without rework.
Archived. Last real development was around 2012; the 2024 "init" commit is just when I pushed the old working folder to GitHub. I am keeping it here as a record. It is not maintained and I would not start a new project on it.
Credits, as noted in the source: the CoreLib design borrows from Benzi K. Ahmed's Citrus framework, and the RSS builder is based on Felipe Sabino's SimpleRSSBuilder.