ClangSharp provides Clang bindings written in C#. It is self-hosted and auto-generates itself parsing the Clang C header files.
|Job||Debug Status||Release Status|
|Ubuntu 16.04 x64|
A nuget package for the project is provided here: https://www.nuget.org/packages/clangsharp. NOTE: This is currently out of date as compared to the current sources and we hope to have a new package published soon.
A convenience package which provides the native libclang library for several platforms is provided here: https://www.nuget.org/packages/libclang
ClangSharp provides several build scripts in the repository root. On Windows these scripts end with
.cmd and expect arguments with a
- prefix. On Unix these scripts end with
.sh and expect arguments with a
By default, each script performs only the action specified in its name (i.e.
restore only restores,
build only builds,
test only tests, and
pack only packs). You can specify additional actions to be run by passing that name as an argument to the script (e.g.
build.cmd -restore will perform a package restore and build;
test.cmd -pack will run tests and package artifacts).
Certain actions are dependent on a previous action having been run at least once.
build depends on
test depends on
pack depends on
build. This means the recommended first time action is
You can reproduce what the CI environment does by running
./scripts/cibuild.cmd on Windows or
./scripts.cibuild.sh on Unix. This will download the required .NET SDK locally and use that to build the repo. It will also run through all available actions in the appropriate order.
You can see any additional options that are available by passing
-help on Windows or
--help on Unix to the available build scripts.
- Auto-generated using Clang C headers files, and supports all functionality exposed by them ~ which means you can build tooling around C/C++
- Exposes the raw unsafe API for performance
- Exposes a slightly higher abstraction that is type safe (CXIndex and CXTranslationUnit are different types, despite being pointers internally)
- Exposes an again slightly higher abstraction that tries to mirror the Clang C++ Type Hierarchy where possible
- Nearly identical to the Clang C APIs, e.g.
clang_getDiagnosticSpellingin C, vs.
clang.getDiagnosticSpelling(notice the . in the C# API)
ClangSharp P/Invoke Binding Generator
A great example of ClangSharp's use case is its self-hosting mechanism: ClangSharp P/Invoke Binding Generator.
This program will take a given set of C or C++ header files and generate C# bindings from them. It is still a work-in-progress and not every declaration can have bindings generated today (contributions are welcome).