v5.2.9: Console, Services and Bug Fixes

11/7/2018 - Marco von Ballmoos (updated on 9/18/2020)

The summary below describes major new features, items of note and breaking changes.

The links above require a login.


This is the last planned release on the 5.x branch of Quino. The future lies with Quino 6, which targets .NET Standard and .NET Core wherever possible.


  • Improved Console Support for Windows Services (QNO-5938)

Breaking changes

  • Renamed AddDefaultExceptionDetailsFormatters() to UseDefaultExceptionDetailsFormatters()
  • Moved crash-reporter types to Encodo.Monitor
  • Renamed ProcessExtensions.StopChild() to StopAndClose()
  • Renamed IProcessParameters.Timeout to IProcessParameters.TimeoutInMilliseconds
  • Renamed IDataGeneratePluginInitializer to IDataGeneratorPluginInitializer
  • Plugin support has been moved from Encodo.Application.Standard to Encodo.Plugins
  • PasswordEncryptionType has been replaced with HashAlgorithm
  • GetSearchClass(IMetaClass) was moved from Quino.Meta to Quino.Builders
  • GetLayout no longer has a default value for the layoutType parameter (pass LayoutType.Detail to get the previous behavior)
  • IKeyValueNode.GetValue() has been moved to an extension method. You may need to include the namespace Encodo.Nodes.
  • Namespaces in Quino.Bookmarks have been changed from Encodo.Quino.Bookmarks.Bookmarks to Encodo.Quino.Bookmarks.
  • WPF schema-migration types have been moved from the Quino.Module.Schema.Wpfnamespace to Encodo.Quino.Module.Schema.Wpf.
  • Some testing support types have been moved from the Tests to the Testing namespace (e.g. EncodoServicesBasedTestsBase and EncodoTestsBase).
  • Introduced the IFinalizerBuilderProvider so that applications no longer need to include the MetaStandardBuilder in models.

Finalizer Provider

Whiile an application no longer needs to manage the insertion point of the MetaStandardBuilder and therefore no longer needs to override PostFinalize() instead of a more relevant method, this is a breaking change for certain situations. For example, if a builder overrode PostFinalize() and expected the finalizer builders included in MetaStandardBuilder to have already run previously.

The workaround is to either:

  • Rewrite the logic to avoid depending on expressions/model added by the finalizer builders. (this is what we ended up doing in Punchclock).
  • Add the builder to the list of finalizer builders (in which case it will be executed last). You can customize the finalizer builders as with an other IProvide using something like the following in your application startup.
  p =>

Relation Captions

Automatic generation of relation captions has changed slightly.

Whereas previously, the captions of the target class were always used, the FallbackCaptionBuilder now only does this if the name of the relation has not been changed from the default.

If the name was changed to something else, then that name is used for relation captions. For example, if you make a relation from a Company to a Person called People, then Quino will still use the captions from the class. This allows your application to set the caption on the class and it will be used for many relations.

However, if you create a similar relation, but rename it to CEO, Quino will no longer use the class captions, since in this case Person and People (and translations) are no longer appropriate. In this case, CEO and CEOs is more appropriate.

In this case, the captions in the default language will be more appropriate but the captions for other languages previously taken from the class will no longer be used on the relation.

Sign up for our Newsletter