# CSharp to Flutter ## Requirements All the following tools must be in your `PATH` : * All platforms + [Bash >= 4.0](https://www.gnu.org/software/bash/) + [BeyondNetGen](https://github.com/royalapplications/beyondnet) + [Android NDK](https://developer.android.com/ndk/downloads) if you want to build for Android * MacOS + [XCode](https://developer.apple.com/xcode/) if you want to build for iOS ## Quick start > **Warning** Your dotnet project must be at the root of this repository Simply run the build script ```bash ./build.sh -i MyLib.Managed ``` More advanced usage: > Context: You want to build a library named `AwesomeFeature` for Android only, and you have the Android NDK installed in `$ANDROID_NDK_ROOT` but not in `$ANDROID_NDK_HOME` . ```bash ./build.sh -i AwesomeFeature --ndk $ANDROID_NDK_ROOT --no-ios ``` [![session recording](./demo.png)](./demo.cast) > **Note** Open the recording with [asciinema](https://asciinema.org/) or by clicking on the image above ## Usage ```shell-session Usage: ./build.sh [options] Options: -h, --help Print this help and exit -i Input project name (required) -g Generated project name (default: . Generated) -o Output folder name (default: libs) -y Assume yes to all prompts --ndk Android NDK path (default: ANDROID_NDK_HOME environment variable) --no-android Disable Android build (default: false) --no-ios Disable iOS build (default: false) --input-spec Input project . NET spec (default: net8.0) --output-spec Output project . NET spec (default: net8.0) ``` ## What is this? This script: * Run `dotnet publish` on the CoreRT managed library to get intermediate dlls * Copy configuration files templates * Android: * Run `beyondnetgen` to generate the C header file and the *unmanaged* csharp code * Build a complete intermediate csproject with the *unmanaged* csharp code and the generated header file * Run `dotnet publish` on the *unmanaged* csharp code for the target platforms. * iOS: * Run `beyondnetgen` and follow full process to get xframework * Copy the generated files to the output folder ## Notes for external dependencies Sometimes, you need to use external dependencies in your library. For example, your library may use Autofac or Newtonsoft.Json. In this case, you need to add the dependencies as **DLL assemblies** in the `external` folder. > **Warning** You must modify the csproj of the original library to reference the external dependencies. ```xml ``` Then during the build, the script will automatically add the external dependencies to the generated project.