There is a user guide for people who wish to use the C# generator. This document is to assist developers working on the the SBE C# generator itself.
Java and gradlew are used to build the generator.
git bash and shell scripts are used for scripting.
The C# code is built using Visual Studio Community 2017.
The Java code that performs the generation of C# code is here.
$ ./gradlew # Will build sbe-tool jar
$ ./gradlew generateCSharpCodecs # will generate the test, benchmark, and example C# code
The Visual Studio 2017 Community solution provides the projects:
- sbe-dll (for common marshalling and DirectBuffer functionality)
- sbe-generated (containing C# code generated by sbe-tool)
- sbe-tests (an mstest suite for unit testing)
- sbe-benchmarks (for performance testing and tuning)
- sbe-example-car (sample code based on the Car example)
- sbe-example-extension (sample code based on the Car extension)
The csharp generator is as of March 2018 a beta release. The current roadmap contains:
- Improved Documentation
- Testing/bug fixes
- Better nuget Packaging
- Possible changes to make group objects accessible without requiring a linear progression.
The nuget package can be built using ~csharp/.nuget/do-release.sh. It has a dependency on the [nuget.exe] (https://dist.nuget.org/index.html).
Before release it will probbalty be necessary to copy in changed files for the example contained in the published nuget package. This is a manual process for now.
Once the nuget package is built it can be tested within the example project by adding a local disk path to the nuget file locations and then updating sbe-tool within the example.
For now you can:
- build the SBE csharp generator using
gradlew - generate the csharp codecs using
gradlew GenerateCSharpCodecs - Use the Visual Studio 2017 Community solution to build the solution, run the unit tests, examples and benchmarks
- Use the command script
- csharpbuild.cmd to build the dotnet core support
- Use the bash script runtests.sh to run the tests
- Build the nuget package via do-release.sh although this remains a largely manual process.