Hi Nick,
Just happened to see this post.
I started on a similar journey a few years ago, and think what you want is doable.
It all comes down to how complex of data structures you are sending back and forth.
I essentially wanted to send a complex nested list back and forth, as that is how I model objects in lisp.
I think the actual final set of functions you will need will not be that hard.
The biggest thing will be developing a structure for your .net libraries, as you will want to re-use as much as possible for various .net progs. Once you get the hang of it, .net is wonderful to program in, as it helps keep large programs under control.
So what I did was decide on various libraries I wanted to set up.
You will likely want these categories at least (these will be projects with multiple source code files included):
General
General Extensions
Forms
AutoCad
AutoCad Lisp
I use the same root namespace for all libraries I write, then add on a second level for each.
So my general is HAHelper
My acad related libraries are HAHelper.Autocad
This namespace and project setup is the biggest hurdle to .net IMO. Its nice once you get it though, very structured compared to lisp.
Then you need to set up test solutions so you can test things in desired way.
So I have a General Test solution that runs items without acad.
Then one that starts acad and loads the test dll via a script.
I can provide all info needed to do this, or read other posts too - whatever is fastest.
So then you will have a solution for each real program.
A solution will reference the libraries mentioned above, as well as a project specific to the task at hand.
email me if I forget to check back, I also have code I can share as we identify things worth sharing.
I am hoping to learn a few things as others read this. The subject of references is tricky.
I have tried to organize libraries so they did not reference things I was not sure if the end user had.
It may be that i could combine my acad and general libraries though, because I think errors do not happen if the end program does not call references that may be missing on a end user's computer...