There is a user guide for people who wish to use the csharp 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 csharp 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.