I am developing a custom package. It contains native plugin, c# scriptable objects, c# scripts, custom editors and sample scenes and assets that use all the above.
I would prefer not to include any of my C# code in the version of the package i distribute. Is it possible to include the corresponding “compiled C#” instead? I believe these are called assemblies (I am not too familiar with these terms yet). I recall having read that this was possible somewhere but can no longer find the info . Any pointer or term I should search for would help.
Building an assembly in C# can be done by building a .NET DLL. You could do this through a Visual Studio Class Library. You need to reference any dependencies (including the appropriate .NET Framework DLLs) as well as the Unity libraries for your platform.
Unity calls these Managed Plug-ins and provides some documentation on them. While you can create your own DLLs, they can be typically de-compiled back into source code; while not necessarily a true representation of what went into it, can still be read and understood by people reverse-engineering it.
You could go one step further and obfuscate the code, there are some tools on the Unity Asset Store which are capable of doing this for you.