【问题标题】:Is it possible to mix .cs (C#) and .fs (F#) files in a single Visual Studio Windows Console Project? (.NET)是否可以在单个 Visual Studio Windows 控制台项目中混合 .cs (C#) 和 .fs (F#) 文件? (。网)
【发布时间】:2010-10-02 18:02:08
【问题描述】:

怎么做? 是否可以在不使用单独的 dll 文件或项目的情况下将一个 F# 代码中的函数调用到 C# 中?

【问题讨论】:

    标签: c# .net visual-studio f# console


    【解决方案1】:

    您不能在同一个项目中包含两种不同的语言,但您可以使用ilmerge 将它们合并。为此,请将两个项目放在同一个解决方案中,并像引用任何 dll 一样引用 F# 模块。作为部署脚本的一部分,运行 ilmerge 将 exe 文件和 dll 文件合并为一个 exe 文件。请参阅这篇 Code Project 文章,详细介绍如何使用 ilmerge 创建 exe。

    【讨论】:

    • F# 的静态链接开关所以和 ilmerge 一样。
    【解决方案2】:

    不能在同一个项目中混合使用 C# 和 F# 会产生问题;它导致两个项目之间的循环依赖。从概念上讲,只有一个项目包含两种语言,但由于 Visual Studio 管理项目的方式,语言不能混合,导致循环依赖。

    目前我看到的唯一解决方案是在第三个项目中创建大量接口并让其中一个项目引用接口项目,而不是真正的项目。 有没有更好的办法?

    亲切的问候, 尼克

    【讨论】:

    • 优秀的评论和问题,但除非您将其作为问题发布,否则您不会得到太多关注。
    • +1 我见过几个商业项目使用 ILMerge 将 C# 和 F# 放入同一个程序集中。微软应该正确支持 ILMerge 并将其嵌入 Visual Studio,而不是让一名员工推出 alpha 版本软件。
    【解决方案3】:

    没有。如果您想生成单个 .exe,您可以使用一些 f# 静态链接选项,使用 F# --full-help 命令行开关来获得更多详细信息。

    【讨论】:

      【解决方案4】:

      您无法在 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)
      

      【讨论】:

        【解决方案5】:

        编译您的 F# 代码,使用任何工具(如反射器、ilspy)“反编译”为 C# 代码,将其包含在项目中 -> 获利!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-08
          • 2013-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多