XmlSchemaClassGenerator-beta 2.1.1156

There is a newer version of this package available.
See the version list below for details.
dotnet add package XmlSchemaClassGenerator-beta --version 2.1.1156                
NuGet\Install-Package XmlSchemaClassGenerator-beta -Version 2.1.1156                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="XmlSchemaClassGenerator-beta" Version="2.1.1156" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add XmlSchemaClassGenerator-beta --version 2.1.1156                
#r "nuget: XmlSchemaClassGenerator-beta, 2.1.1156"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install XmlSchemaClassGenerator-beta as a Cake Addin
#addin nuget:?package=XmlSchemaClassGenerator-beta&version=2.1.1156

// Install XmlSchemaClassGenerator-beta as a Cake Tool
#tool nuget:?package=XmlSchemaClassGenerator-beta&version=2.1.1156                

XmlSchemaClassGenerator

Nuget Build status codecov.io netstandard2.0 net462

A console program and library to generate XmlSerializer compatible C# classes from XML Schema files.

Features

  • Map XML namespaces to C# namespaces, either explicitly or through a (configurable) function
  • Generate C# XML comments from schema annotations
  • Generate DataAnnotations attributes from schema restrictions
  • Use Collection<T> properties (initialized in constructor and with private setter)
  • Map xs:integer and derived types to the closest possible .NET type, if not possible - fall back to string. Can be overriden by explicitly defined type (int, long, or decimal)
  • Automatic properties
  • Pascal case for classes and properties
  • Generate nullable adapter properties for optional elements and attributes without default values (see below)
  • Optional support for PCL
  • Optional support for INotifyPropertyChanged
  • Optional support for Entity Framework Code First (automatically generate key properties)
  • Optionally generate interfaces for groups and attribute groups
  • Optionally generate one file per class
  • Support for nullable reference types (NRTs) through AllowNullAttribute and MaybeNullAttribute
  • Optionally generate a common specific type for union member types

Unsupported:

  • Some restriction types
  • Recursive choices and choices whose elements have minOccurs > 0 or nillable="true" (see below)
  • Possible name clashes and invalid identifiers when names contain non-alphanumeric characters
  • Groups with maxOccurs > 0

Usage

For command line use, choose your preferred installation:

<pre> Usage: xscgen [OPTIONS]+ xsdFile... Generate C# classes from XML Schema files. Version ... xsdFiles may contain globs, e.g. "content{schema,xsd}***.xsd", and URLs. Append - to option to disable it, e.g. --interface-.

Options: -h, --help show this message and exit -n, --namespace=VALUE map an XML namespace to a C# namespace Separate XML namespace and C# namespace by '='. A single value (no '=') is taken as the C# namespace the empty XML namespace is mapped to. One option must be given for each namespace to be mapped. A file name may be given by appending a pipe sign (|) followed by a file name (like schema. xsd) to the XML namespace. If no mapping is found for an XML namespace, a name is generated automatically (may fail). --nf, --namespaceFile=VALUE file containing mappings from XML namespaces to C# namespaces The line format is one mapping per line: XML namespace = C# namespace [optional file name]. Lines starting with # and empty lines are ignored. --tns, --typeNameSubstitute=VALUE substitute a generated type/member name Separate type/member name and substitute name by '='. Prefix type/member name with an appropriate kind ID as documented at: <a href="https://t.ly/HHEI">https://t.ly/HHEI</a>. Prefix with 'A:' to substitute any type/member. --tnsf, --typeNameSubstituteFile=VALUE file containing generated type/member name substitute mappings The line format is one mapping per line: prefixed type/member name = substitute name. Lines starting with # and empty lines are ignored. -o, --output=FOLDER the FOLDER to write the resulting .cs files to -d, --datetime-offset map xs:datetime and derived types to System. DateTimeOffset instead of System.DateTime -i, --integer=TYPE map xs:integer and derived types to TYPE instead of automatic approximation TYPE can be i[nt], l[ong], or d[ecimal] --fb, --fallback, --use-integer-type-as-fallback use integer type specified via -i only if no type can be deduced -e, --edb, --enable-data-binding enable INotifyPropertyChanged data binding -r, --order emit order for all class members stored as XML element -c, --pcl PCL compatible output -p, --prefix=PREFIX the PREFIX to prepend to auto-generated namespace names -v, --verbose print generated file names on stdout -0, --nullable generate nullable adapter properties for optional elements/attributes w/o default values -f, --ef generate Entity Framework Code First compatible classes -t, --interface generate interfaces for groups and attribute groups (default is enabled) -a, --pascal use Pascal case for class and property names ( default is enabled) --av, --assemblyVisible use the internal visibility modifier (default is false) -u, --enableUpaCheck should XmlSchemaSet check for Unique Particle Attribution (UPA) (default is enabled) --ct, --collectionType=VALUE collection type to use (default is System. Collections.ObjectModel.Collection`1) --cit, --collectionImplementationType=VALUE the default collection type implementation to use ( default is null) --csm, --collectionSettersMode=Private, Public, PublicWithoutConstructorInitialization, Init, InitWithoutConstructorInitialization generate a private, public, or init-only setter with or without backing field initialization for collections (default is Private; can be: Private, Public, PublicWithoutConstructorInitialization, Init, InitWithoutConstructorInitialization) --ctro, --codeTypeReferenceOptions=GlobalReference, GenericTypeParameter the default CodeTypeReferenceOptions Flags to use ( default is unset; can be: GlobalReference, GenericTypeParameter) --tvpn, --textValuePropertyName=VALUE the name of the property that holds the text value of an element (default is Value) --dst, --debuggerStepThrough generate DebuggerStepThroughAttribute (default is enabled) --dc, --disableComments do not include comments from xsd --nu, --noUnderscore do not generate underscore in private member name ( default is false) --da, --description generate DescriptionAttribute (default is true) --cc, --complexTypesForCollections generate complex types for collections (default is true) -s, --useShouldSerialize use ShouldSerialize pattern instead of Specified pattern (default is false) --sf, --separateFiles generate a separate file for each class (default is false) --nh, --namespaceHierarchy generate a separate folder for namespace hierarchy. Implies "separateFiles" if true (default is false) --sg, --separateSubstitutes generate a separate property for each element of a substitution group (default is false) --dnfin, --doNotForceIsNullable do not force generator to emit IsNullable = true in XmlElement annotation for nillable elements when element is nullable (minOccurs < 1 or parent element is choice) (default is false) --cn, --compactTypeNames use type names without namespace qualifier for types in the using list (default is false) --cl, --commentLanguages=VALUE comment languages to use (default is en; supported are en, de) --un, --uniqueTypeNames generate type names that are unique across namespaces (default is false) --gc, --generatedCodeAttribute add version information to GeneratedCodeAttribute ( default is true) --nc, --netCore generate .NET Core specific code that might not work with .NET Framework (default is false) --nr, --nullableReferenceAttributes generate attributes for nullable reference types ( default is false) --ar, --useArrayItemAttribute use ArrayItemAttribute for sequences with single elements (default is true) --es, --enumAsString Use string instead of enum for enumeration --ca, --commandArgs generate a comment with the exact command line arguments that were used to generate the source code (default is true) --uc, --unionCommonType generate a common type for unions if possible ( default is false) --dtd, --allowDtdParse allow DTD parsing (default is false) --ns, --namingScheme use the specified naming scheme for class and property names (default is Pascal; can be: Direct, Pascal, Legacy) </pre>

For use from code use the library NuGet package:

var generator = new Generator
{
    OutputFolder = outputFolder,
    Log = s => Console.Out.WriteLine(s),
    GenerateNullables = true,
    NamespaceProvider = new Dictionary<NamespaceKey, string> 
    { 
        { new NamespaceKey("http://wadl.dev.java.net/2009/02"), "Wadl" } 
    }
    .ToNamespaceProvider(new GeneratorConfiguration { NamespacePrefix = "Wadl" }.NamespaceProvider.GenerateNamespace)
};

generator.Generate(files);

Specifying the NamespaceProvider is optional. If you don't provide one, C# namespaces will be generated automatically. The example above shows how to create a custom NamespaceProvider that has a dictionary for a number of specific namespaces as well as a generator function for XML namespaces that are not in the dictionary. In the example the generator function is the default function but with a custom namespace prefix. You can also use a custom generator function, e.g.

var generator = new Generator
{
    NamespaceProvider = new NamespaceProvider
    { 
        GenerateNamespace = key => ...
    }
};

Mapping xsd files to C# namespaces

Using the optional | syntax of the -n command line option you can map individual xsd files to C# namespaces. If you have several input files using the same XML namespace you can still generate an individual C# namespace for the types defined within a single xsd file. For example, if you have two input files a.xsd and b.xsd both of which have the same targetNamespace of http://example.com/namespace you can generate the C# namespaces Example.NamespaceA and Example.NamespaceB:

xscgen -n "|a.xsd=Example.NamespaceA" -n "|b.xsd=Example.NamespaceB" a.xsd b.xsd
Mapping empty XML namespaces

In order to provide a C# namespace name for an empty XML namespace you can specify it on the command line like this:

xscgen -n Example example.xsd

An alternative form that is also valid is -n =Example. Note the space between -n and =Example.

Using mapping files

Instead of specifying the namespace mappings on the command line you can also use a mapping file which should contain one mapping per line in the following format:

# Comment

http://example.com = Example.NamespaceA a.xsd
http://example.com = Example.NamespaceB b.xsd
Empty
# or alternatively
= Empty

Use the --nf option to specify the mapping file.

Substituting generated C# type and member names

If a xsd file specifies obscure names for their types (classes, enums) or members (properties), you can substitute these using the --tns/--typeNameSubstitute= parameter:

xscgen --tns T:Example_RootType=Example --tns T:Example_RootTypeExampleScope=ExampleScope --tns P:StartDateDateTimeValue=StartDate example.xsd

The syntax for substitution is: {kindId}:{generatedName}={substituteName}

The {kindId} is a single character identifier based on documentation/analysis ID format, where valid values are:

ID Scope
P Property
T Type: class, enum, interface
A Any property and/or type
Using substitution files

Instead of specifying the substitutions on the command line you can also use a substitution file which should contain one substitution per line in the following format:

# Comment
T:Example_RootType = Example
T:Example_RootTypeExampleScope = ExampleScope
P:StartDateDateTimeValue = StartDate

Use the --tnsf/--typeNameSubstituteFile option to specify the substitution file.

Nullables<a name="nullables"></a>

XmlSerializer has been present in the .NET Framework since version 1.1 and has never been updated to provide support for nullables which are a natural fit for the problem of signaling the absence or presence of a value type but have only been present since .NET Framework 2.0.

Instead XmlSerializer has support for a pattern where you provide an additional bool property with "Specified" appended to the name to signal if the original property should be serialized. For example:

<xs:attribute name="id" type="xs:int" use="optional">...</xs:attribute>
[System.Xml.Serialization.XmlAttributeAttribute("id", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="int")]
public int Id { get; set; }

[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool IdSpecified { get; set; }

XmlSchemaClassGenerator can optionally generate an additional nullable property that works as an adapter to both properties:

[System.Xml.Serialization.XmlAttributeAttribute("id", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="int")]
public int IdValue { get; set; }
        
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool IdValueSpecified { get; set; }

[System.Xml.Serialization.XmlIgnoreAttribute()]
public System.Nullable<int> Id
{
    get
    {
        if (this.IdValueSpecified)
        {
            return this.IdValue;
        }
        else
        {
            return null;
        }
    }
    set
    {
        this.IdValue = value.GetValueOrDefault();
        this.IdValueSpecified = value.HasValue;
    }
}

Choice Elements<a name="choice"></a>

The support for choice elements differs from that provided by xsd.exe. Xsd.exe generates a property called Item of type object and, if not all choices have a distinct type, another enum property that selects the chosen element. Besides being non-typesafe and non-intuitive, this approach breaks apart if the choices have a more complicated structure (e.g. sequences), resulting in possibly schema-invalid XML.

XmlSchemaClassGenerator currently simply pretends choices are sequences. This means you'll have to take care only to set a schema-valid combination of these properties to non-null values.

Interfaces<a name="interfaces"></a>

Groups and attribute groups in XML Schema are reusable components that can be included in multiple type definitions. XmlSchemaClassGenerator can optionally generate interfaces from these groups to make it easier to access common properties on otherwise unrelated classes. So

<xs:attributeGroup name="Common">
  <xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:attributeGroup>

<xs:complexType name="A">
  <xs:attributeGroup ref="Common"/>
</xs:complexType>

<xs:complexType name="B">
  <xs:attributeGroup ref="Common"/>
</xs:complexType>

becomes

public partial interface ICommon
{
  string Name { get; set; }
}

public partial class A: ICommon
{
  public string Name { get; set; }
}

public partial class B: ICommon
{
  public string Name { get; set; }
}

Collection types

Values for the --collectionType and --collectionImplementationType options have to be given in the format accepted by the Type.GetType() method. For the System.Collections.Generic.List<T> class this means System.Collections.Generic.List`1.

Integer and derived types

Not all numeric types defined by XML Schema can be safely and accurately mapped to .NET numeric data types, however, it's possible to approximate the mapping based on the integer bounds and restrictions such as totalDigits.
If an explicit integer type mapping is specified via --integer=TYPE, that type will be used, otherwise an approximation will be made based on the table below. If you additionally specify --fallback, the type specified via --integer=TYPE will be used only if no type can be deduced by applying the rules below.

If the restrictions minInclusive and maxInclusive are present on the integer element, then the smallest CLR type that fully encompasses the specified range will be used. Unsigned types are given precedence over signed types. The following table shows the possible ranges and their corresponding CLR type, in the order they will be applied.

<table> <tr> <th>Minimum (Inclusive)</th> <th>Maximum (Inclusive)</th> <th>C# type</th> <tr><td>sbyte.MinValue</td><td>sbyte.MaxValue</td><td>sbyte</td></tr> <tr><td>byte.MinValue</td><td>byte.MaxValue</td><td>byte</td></tr> <tr><td>ushort.MinValue</td><td>ushort.MaxValue</td><td>ushort</td></tr> <tr><td>short.MinValue</td><td>short.MaxValue</td><td>short</td></tr> <tr><td>uint.MinValue</td><td>uint.MaxValue</td><td>uint</td></tr> <tr><td>int.MinValue</td><td>int.MaxValue</td><td>int</td></tr> <tr><td>ulong.MinValue</td><td>ulong.MaxValue</td><td>ulong</td></tr> <tr><td>long.MinValue</td><td>long.MaxValue</td><td>long</td></tr> <tr><td>decimal.MinValue</td><td>decimal.MaxValue</td><td>decimal</td></tr> </tr> </table>

If the range specified by minInclusive and maxInclusive does not fit in any CLR type, or if those restrictions are not present, then the totalDigits restriction will be used, as shown in the following table.

<table> <tr> <th>XML Schema type</th> <th>totalDigits</th> <th>C# type</th> </tr> <tr><td rowspan="6">xs:positiveInteger<br>xs:nonNegativeInteger</td><td><3</td><td>byte</td></tr> <tr><td><5</td><td>ushort</td></tr> <tr><td><10</td><td>uint</td></tr> <tr><td><20</td><td>ulong</td></tr> <tr><td><30</td><td>decimal</td></tr> <tr><td>>=30</td><td>string</td></tr> <tr><td rowspan="6">xs:integer<br>xs:nonPositiveInteger<br>xs:negativeInteger</td><td><3</td><td>sbyte</td></tr> <tr><td><5</td><td>short</td></tr> <tr><td><10</td><td>int</td></tr> <tr><td><19</td><td>long</td></tr> <tr><td><29</td><td>decimal</td></tr> <tr><td>>=29</td><td>string</td></tr> </table>

Unions

If you specify --unionCommonType, XmlSchemaClassGenerator will try to determine a common type for a union's member types. If, for example, the member types are all integer types, then the narrowest integer type will be used that can fit all member types.

Note that semantic issues might arise with this approach. For example, DateTime values are serialized with both date and time information included. See discussion at #397.

Contributing

Contributions are welcome. Here are some guidelines:

  • If it's not a trivial fix, please submit an issue first
  • Try and blend new code with the existing code's style
  • Add unit tests
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on XmlSchemaClassGenerator-beta:

Package Downloads
XmlSchemaClassGenerator.Console

A .NET CLI tool to generate XmlSerializer compatible C# classes from XML Schema files.

dotnet-xscgen-proj

A .NET Core CLI tool to generate XmlSerializer compatible C# classes from XML Schema files.

Frank.UblSharp.GeneratorV2

Package Description

Frank.UblSharp.Generation

Package Description

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on XmlSchemaClassGenerator-beta:

Repository Stars
nodatime/nodatime
A better date and time API for .NET
Version Downloads Last updated
2.1.1164 326 10/23/2024
2.1.1162 6,189 8/30/2024
2.1.1160 5,120 7/19/2024
2.1.1158 2,079 7/2/2024
2.1.1156 127 7/2/2024
2.1.1155 407 6/28/2024
2.1.1144 2,250 5/31/2024
2.1.1142 1,584 5/17/2024
2.1.1141 260 5/14/2024
2.1.1130 1,239 4/19/2024
2.1.1127 419 4/12/2024
2.1.1107 4,927 2/19/2024
2.1.1094 2,598 2/12/2024
2.1.1092 480 2/9/2024
2.1.1057 7,778 12/14/2023
2.1.1051 997 12/11/2023
2.1.963 4,795 10/31/2023
2.1.959 758 10/30/2023
2.1.956 975 10/23/2023
2.1.954 1,189 10/17/2023
2.1.915 2,125 10/2/2023
2.1.910 779 9/27/2023
2.1.908 786 9/22/2023
2.0.894 5,669 9/5/2023
2.0.878 16,575 8/9/2023
2.0.874 942 8/8/2023
2.0.864 1,326 7/26/2023
2.0.863 980 7/25/2023
2.0.862-beta 895 7/24/2023
2.0.861 1,005 7/20/2023
2.0.859 927 7/18/2023
2.0.858 932 7/17/2023
2.0.810 6,785 5/16/2023
2.0.805 2,387 3/16/2023
2.0.792 2,753 1/26/2023
2.0.732 17,276 8/23/2022
2.0.719 20,911 7/26/2022
2.0.718 13,053 6/28/2022
2.0.717 1,632 6/24/2022
2.0.714 1,899 6/21/2022
2.0.711 2,113 6/17/2022
2.0.703 1,923 6/8/2022
2.0.692 1,764 5/31/2022
2.0.662 11,023 4/4/2022
2.0.660 4,922 3/21/2022
2.0.646 4,591 2/7/2022
2.0.642 1,574 2/2/2022
2.0.634 1,732 1/21/2022
2.0.633 1,611 1/18/2022
2.0.631 1,960 1/6/2022
2.0.630 1,418 12/16/2021
2.0.629 1,769 11/30/2021
2.0.627 1,990 11/29/2021
2.0.594 5,748 9/8/2021
2.0.579 1,536 8/25/2021
2.0.567 1,961 8/11/2021
2.0.566 1,576 8/5/2021
2.0.565 2,193 7/26/2021
2.0.560 20,476 5/31/2021
2.0.521 9,304 4/9/2021
2.0.517 7,554 3/17/2021
2.0.513 1,528 3/15/2021
2.0.512 1,474 3/10/2021
2.0.509 1,548 3/9/2021
2.0.502 5,770 1/29/2021
2.0.495 1,652 1/14/2021
2.0.494 1,494 1/12/2021
2.0.490 1,708 12/24/2020
2.0.488 1,581 12/23/2020
2.0.487 3,070 12/17/2020
2.0.486 1,718 12/10/2020
2.0.484 1,559 12/9/2020
2.0.479 15,995 11/20/2020
2.0.478 2,583 11/15/2020
2.0.460 1,759 10/28/2020
2.0.459 2,417 10/20/2020
2.0.444 8,412 7/28/2020
2.0.439 2,023 7/14/2020
2.0.436 19,314 6/22/2020
2.0.435 1,178 6/19/2020
2.0.434 1,698 6/9/2020
2.0.425 2,097 5/18/2020
2.0.424 1,878 5/14/2020
2.0.421 10,150 5/13/2020
2.0.419 1,583 5/13/2020
2.0.414 1,672 5/4/2020
2.0.412 1,613 5/3/2020
2.0.405 1,629 5/1/2020
2.0.395 2,750 4/30/2020
2.0.390 1,710 4/29/2020
2.0.373 1,609 4/24/2020
2.0.370 1,622 4/23/2020
2.0.365 1,635 4/23/2020
2.0.349 14,018 3/27/2020
2.0.347 1,872 3/13/2020
2.0.346 1,625 3/11/2020
2.0.345 1,753 2/28/2020
2.0.341 2,058 1/24/2020
2.0.340 1,622 1/23/2020
2.0.334 1,726 1/21/2020
2.0.322 6,657 12/28/2019
2.0.310 3,748 11/22/2019
2.0.301 4,783 11/6/2019
2.0.300 1,841 10/16/2019
2.0.296 2,191 10/2/2019
2.0.267 1,726 9/12/2019
2.0.261 1,704 9/3/2019
2.0.257 1,715 8/23/2019
2.0.254 1,926 7/17/2019
2.0.252 1,956 7/8/2019
2.0.241 1,947 6/25/2019
2.0.232 2,272 3/28/2019
2.0.230 1,829 3/11/2019
2.0.214 1,771 3/6/2019
2.0.212 1,899 2/21/2019
2.0.210 1,822 2/20/2019
2.0.209 1,269 2/20/2019
2.0.208 1,348 2/13/2019
2.0.206 1,924 1/31/2019
2.0.199 1,376 1/23/2019
2.0.197 1,551 1/3/2019
2.0.195 1,407 12/28/2018
2.0.187 1,734 11/30/2018
2.0.183 1,348 11/30/2018
2.0.180 2,146 10/10/2018
2.0.177 1,443 10/9/2018
2.0.174 2,341 10/4/2018
2.0.172 1,426 10/4/2018
2.0.160 1,474 9/19/2018
2.0.149 1,594 8/14/2018
2.0.147 1,569 7/27/2018
2.0.142 1,731 7/2/2018
2.0.140 1,635 7/2/2018
2.0.135 1,655 6/26/2018
2.0.133 1,679 6/26/2018
2.0.106 1,988 4/13/2018
2.0.105 2,111 4/12/2018
2.0.104 2,046 4/12/2018
2.0.102 2,230 4/12/2018
2.0.99 1,606 4/11/2018
2.0.97 1,658 4/11/2018
2.0.85-beta 1,397 2/22/2018
2.0.83-beta 1,353 12/6/2017
2.0.82-beta 1,308 12/5/2017
2.0.78-beta 1,344 10/10/2017
2.0.77-beta 1,510 10/10/2017
2.0.73-beta 1,523 8/29/2017
1.0.58 2,665 5/23/2017
1.0.50 1,667 5/12/2017
1.0.47 1,632 4/10/2017
1.0.45 1,604 4/5/2017
1.0.34 2,225 12/7/2016
1.0.32 1,709 12/4/2016
1.0.31 2,668 9/22/2016
1.0.28 2,061 7/13/2016
1.0.20 2,648 1/1/2016
1.0.15 1,932 12/4/2015
1.0.13 2,160 12/3/2015
1.0.12 2,026 11/5/2015
0.8.5767.29668-beta 1,721 10/16/2015
0.8.5750.32814-beta 1,854 9/29/2015
0.8.5718.30343-beta 1,741 8/28/2015
0.7.5703.30363-beta 1,825 8/13/2015
0.7.5668.20189-beta 1,773 7/9/2015
0.6.5640.32393-beta 1,803 6/11/2015
0.5.5540.23230-beta 2,042 3/3/2015
0.5.5540.22937-beta 1,921 3/3/2015
0.5.5514.24827-beta 1,748 2/5/2015
0.5.5514.24272-beta 1,746 2/5/2015
0.5.5514.24013-beta 1,734 2/5/2015
0.5.5501.32065-beta 1,732 1/23/2015
0.5.5494.29733-beta 1,773 1/16/2015
0.5.5493.32546-beta 1,737 1/15/2015
0.5.5493.25243-beta 1,817 1/15/2015
0.5.5493.24694-beta 1,481 1/15/2015
0.4.5463.24795-beta 1,979 12/16/2014
0.3.5436.30355-beta 2,054 11/19/2014
0.3.5235.30369-beta 1,850 5/2/2014
0.2.5145.38480-beta 1,665 2/1/2014
0.2.5143.24328 2,299 1/30/2014
0.1.5109.28584 1,926 12/27/2013
0.1.5101.32625 2,025 12/19/2013