【发布时间】:2010-10-02 18:02:08
【问题描述】:
怎么做? 是否可以在不使用单独的 dll 文件或项目的情况下将一个 F# 代码中的函数调用到 C# 中?
【问题讨论】:
标签: c# .net visual-studio f# console
怎么做? 是否可以在不使用单独的 dll 文件或项目的情况下将一个 F# 代码中的函数调用到 C# 中?
【问题讨论】:
标签: c# .net visual-studio f# console
您不能在同一个项目中包含两种不同的语言,但您可以使用ilmerge 将它们合并。为此,请将两个项目放在同一个解决方案中,并像引用任何 dll 一样引用 F# 模块。作为部署脚本的一部分,运行 ilmerge 将 exe 文件和 dll 文件合并为一个 exe 文件。请参阅这篇 Code Project 文章,详细介绍如何使用 ilmerge 创建 exe。
【讨论】:
不能在同一个项目中混合使用 C# 和 F# 会产生问题;它导致两个项目之间的循环依赖。从概念上讲,只有一个项目包含两种语言,但由于 Visual Studio 管理项目的方式,语言不能混合,导致循环依赖。
目前我看到的唯一解决方案是在第三个项目中创建大量接口并让其中一个项目引用接口项目,而不是真正的项目。 有没有更好的办法?
亲切的问候, 尼克
【讨论】:
没有。如果您想生成单个 .exe,您可以使用一些 f# 静态链接选项,使用 F# --full-help 命令行开关来获得更多详细信息。
【讨论】:
您无法在 C# 项目中编译 F# 源文件 (.fs),但您可以添加 F# 脚本文件 (.fsx),您可以使用这些文件从 F# 交互中引用和探索 C# 项目的程序集:
public static class Math
{
public static double PowN(double d, int n)
{
var result = 1;
for (int i = 0; i < n; i++) result *= d;
return result;
}
}
F# 脚本文件 (.fsx):
#r "bin\debug\ClassLibrary1.dll"
Math.PowN(2.0,3)
【讨论】:
编译您的 F# 代码,使用任何工具(如反射器、ilspy)“反编译”为 C# 代码,将其包含在项目中 -> 获利!
【讨论】: