I maintain a library written in C# to achieve this.
It is actively maintained and I happily accept contributions.