New Release of Essence#: Philemon-3 (Alpha Build 19)

The Philemon-3 release corrects a problem with the script of the NSIS installation program generator used to build the installer for the previous release. That issue could have been addressed by simply fixing the script and then regenerating the installation program, but a) it was judged to be less work to create a new release based on the current development code, and b) a new release does a better job of communicating the fact that the installation program for the previous release is broken.

Therefore, here’s a new release which not only fixes the problem with the installer, but also enhances the functionality of the new configuration profile feature which was introduced in the previous release.

However, since the previous release was published less than a day ago, and since there haven’t been many downloads of it, the remainder of the release note for this release will be worded as though the previous release had never been published. In other words, it will compare itself to the Philemon release (Alpha Build 17,) and not the previous release, which was Philemon-2 (Alpha Build 18.)

The “Philemon-3” release can be downloaded from the Essence# site on CodePlex (which gets you the installer.) Alternatively, the code for the run time system (written in C#) can be obtained from theEssence# CodePlex site using Git, and the code for the Essence# Standard Library can be obtained from GitHub. And the example scripts can also be downloaded from the Scripts repository on GitHub, as can the new configuration profile folder.

Changes with respect to the Philemon release (Alpha Build 17)

The Philemon-3 release fixes bugs, most of which have to do with the binding of .Net assemblies.

Configuration profiles have been added in order to help solve some of the .Net assembly binding issues.

Configuration Profiles

A configuration profile is persistently stored as a folder in the filesystem. It must be located in the folder %EssenceSharpPath%\Config. The folder name must use “.profile” as its file extension. A configuration profilefolder may (optionally) contain one or more files–each with its own format–that specify configuration options that globally apply to Essence#.

Currently, a configuration profile can be used to define an assembly map, to define a list of class library search paths and to define a list of script search paths.

A search paths file must have the file extension “.searchPaths” and must contain pathnames of folders to be searched, one per line with no other punctuation, listed in the desired sequence, from first to last. The listed pathnames must be absolute pathnames, but may use environment variable references, such as %UserProfile% or %EssenceSharpPath%.

The name of the search paths file for class libraries must be “library.searchPaths”, and the name of the search paths file for scripts must be “scripts.searchPaths”. Neither file is required.

An AssemblyMap configuration file must be named “” If present, it must contain an Essence# dictionary literal (which may be empty,) or else the file must be empty. If the dictionary literal isn’t empty, the keys in the dictionary must be logical assembly names, and the values must be physical assembly names that can be used to actually load a .Net assembly.

Example AssemblyMap

#System 		-> 'System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

#System.Core 		-> 'System.Core, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

#System.ServiceModel 	-> 'System.ServiceModel, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

#Windows.Base		-> 'WindowsBase, Version=, Culture=neutral, PublicKeyToken=31bf3856ad364e35'

The benefits of using AssemblyMap configuration files are the following:

  • Application and class library developers can use logical names for .Net assemblies which are short and concise.
  • Application and class library developers can use logical assembly names to avoid committing themselves to a particular version of an assembly.
  • Developers and users can modify the AssemblyMap configuration file in order to globally change which versions of one or more .Net assemblies will be used at run time.

If it’s been defined in your configuration profile, then you may optionally use a logical assembly name in place of a physical assembly name as the argument to the message #assemblyName:, when sending that message to any Essence# namespace, trait or class.

Specifying The Configuration Profile(s) To Be Used

Any number of different configuration profiles may be used at the same time, or even none at all. To specify the set of configuration profiles that should be used, list their names–one per line with no other punctuation–in the “activeProfiles” text file, which resides in the %EssenceSharpPath%\Config folder. It is not necessary to use the “.profile” extension in the list of names.

Note that the order in which configuration profiles are listed in the “activeProfiles” file matters, because the effect of combining two or more of them together is additive, but conflicts between them are resolved by using the configuration options specified by whichever profile occurs later in the list of active configuration profiles.

Changes To The Essence# Standard Library

The ‘Philemon-3’ release makes some changes to the Essence# Standard Library–which is installed by the installer program attached to this release, or which may be obtained separately from GitHub.

A repository for Configuration Profiles has been added to the Essence# GitHub page.

Please see the documentation page on CodePlex for more information on how to use Essence#.

Finally, if you have a previous version of Essence# and have also written your own Essence# code, then please be sure to also read the release notes for the previous version: Philemon (Alpha Build 17).


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s