Have you guys considered porting the main C# project in the .NET openNURBS SDK to a Portable Class Library?
Brief rundown on PCLs here, for the uninitiated:
PCLs are extremely powerful these days, as they can work out-of-the-box in virtually any platform (all modern Microsoft platforms including Windows Desktop via regular .NET, Windows Store Apps, Windows Phone Apps; plus Linux, Mac, Android and iOS via Mono), without any need for separate build configurations. You just need to make sure you’re not P/Invoking Windows API calls to guarantee it works on non-Microsoft platforms.
Portable Class Libraries use a set of reference assemblies referred to as the .NET Portable Subset. It is, as the name suggests, a subset of the core .NET assemblies. That said, Rhino3dmIO currently utilizes some functionalities that are not available in a PCL. Here’s a few things that would need to change:
-Anything referencing the System.Drawing structs and System.Windows.Forms would need to go away or reference something else, since these namespaces impose a platform dependency (only work with desktop applications) and are not included in the subset. Luckily all the Windows Forms usages appear to be restricted to rhinocommon\dotnet\UI and can be easily moved to a separate assembly (it’s perfectly fine to make a regular .NET 4/4.5 assembly which references a PCL).
-The old style of .NET built-in serialization is no longer available (ISerializable interface, SerializableAttribute and related attributes). They’ve been superseded by [DataContract], which maybe you’ll want to switch to anyway.
-The AssemblyResolver class would be pretty much entirely unusable since it’s a plugin architecture implementation, which is strictly forbidden in Windows Store Apps and Windows Store Apps (no runtime assembly loading or filesystem searching). Like Windows Forms, this could just be moved to a regular .NET assembly and used only on desktop platforms.
-Various other things like Code Access Security (CAS) seem to be more restrictive in a PCL and things like SuppressUnmanagedCodeSecurityAttribute are not available. Not sure if there’s an alternative for that attribute in particular.
Let me know if there are any plans to explore PCLs or if there’s anything else you’re curious to know about them.