简体   繁体   中英

Is there a way to run F# code from a C# program?

I use Rider and/or Visual Studio for Mac to run my C# code. I can individually create an F# project if needed. How do I run the F# code within the C# main program:

class MainClass
{
    public static unsafe void Main(string[] args)
    {
        //F() = function that executes F# code
        Console.WriteLine(F());
    }
}

And F# code: printf("Hello, World!\n") or any code really

I tried this in the terminal: Terminal VS error

Create an F# class library, add your F# code. Create a C# console (or whatever) app, reference the F# class library, and call the f# code from your C# code. you may need a 'using' statement to get your F# code accessible.

C#/F# code both compile to similar binary files (PE code, or something like that), which are mostly accessible from the other language, there are some features of both languages that don't translate (SRTPs being the most obvious thing not accessible from C#).

Interoperability though is at this binary level, you can't just write F# code in a C# source file or vice versa (though this is possible in some other languages).

instructions:

create F# class library called "ClassLibrary1"

in Visual Studio

namespace ClassLibrary1

module Say =
    let hello name =
        printfn "Hello %s" name

ADD C# console app called "ConsoleApp1" to the same solution

Add project reference from consoleapp1 to classlibrary1

your C# project file should look something like this (obviously it may be slightly different but the crucial bit is the project reference)

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.fsproj" />
  </ItemGroup>
</Project>

build

paste this code into your C# code

using ClassLibrary1;

Say.hello("Mr D");

If you can't get it to work do this

https://learn.microsoft.com/en-us/do.net/core/tutorials/library-with-visual-studio?pivots=do.net-7-0

get that working, then just do the first bit with an F# class library instead of a C# one

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM