I've looked at other instructions and still have no idea how to do this. I have two projects (Calculator in C# and Logic in F#). I added a reference to Logic in Calculator, as well as a reference to FSharp.Core
However when I add the line
float result = Logic.start(formula);
In my C# project, I get an error saying:
"The name Logic does not exist in the current context."
There is a module Logic in the logic project, so it should show up right? What am I still missing?
EDIT: Here's the function definition...
let start formula =
core (List.ofSeq formula) [] []
You cannot refer from C# just an F# module without any namespace. Do something like this:
// F# project
namespace Some
module Logic =
let start formula =
.....
or equivalent
// F# project
module Some.Logic
let start formula =
.....
and
// C# project
.....
Some.Logic.start(formula)
and reference F# project from C# project.
UPDATE: As JackP pointed out, the other alternative exists, allowing to avoid using of explicit namespace on F# side altogether.
When in C# you create a class outside of any namespace this class may be referred by prepending its name with global
contextual keyword followed by ::
operator, which is the way of referencing default top-level .NET namespace. F# module with a simple name outside of any namespace from reference standpoint is equivalent to one having namespace global
in the very first line of code. Applying this consideration to your case you may alternatively do:
// F# definition
// namespace global is assumed
module Logic
let start formula =
.....
// C# reference
...global::Logic.start(formula)...
Gory details about global::
available on MSDN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With