【问题标题】:F# VS2019 Windows FormsF# VS2019 Windows 窗体
【发布时间】:2020-07-01 21:48:02
【问题描述】:

我正在学习 F#,我只是在尝试构建 Animate 一个钟摆程序。 这是代码: https://rosettacode.org/wiki/Animate_a_pendulum#F.23

据我了解,VS 2019 不支持 F# 中的 WinForms(也许,我错了),所以我有错误消息,试图复制/粘贴该代码:

我该怎么办?
非常感谢!

【问题讨论】:

  • 请将图片替换为文字(图片太难阅读)。第一个错误可能意味着您缺少包引用(可能是项目文件中设置了错误的 SDK:与要检查的 C#/VB.NET WinForms 项目进行比较)。

标签: visual-studio winforms functional-programming f#


【解决方案1】:

如果您希望在 .NET 核心上使用 Winforms,您需要在您的项目中执行以下操作:

  1. 打开项目文件(在Visual Studio中双击节点)
  2. Sdk 更改为Microsoft.NET.Sdk.WindowsDesktop
  3. 确保你有这个OutputType: <OutputType>WinExe</OutputType>
  4. 将以下属性添加到顶级PropertyGroup<UseWindowsForms>true</UseWindowsForms>

不会使用可视化设计器,但您应该可以访问 API。

【讨论】:

  • 从 .NET 5 开始,您也可以坚持使用 <Project Sdk="Microsoft.NET.Sdk"> 并使用目标框架名字对象 <TargetFramework>net5.0-windows</TargetFramework>
【解决方案2】:

不幸的是,Visual Studio 2019 中没有用于 any 类型的 F# 项目的 Winforms 设计器,并且 Winforms 只能在 中轻松访问(据我所知)。 Net FrameworkNOT .NET Core)项目可以根据@Phillip Carter 的回答访问它们。

但是,您仍然可以通过手动添加对 .NET Framework 项目的引用,或者(更容易)通过使用 F# 编译器手动编译 fsc 来轻松制作 Winforms 程序。

  • 捷径

最简单的方法是使用 F# 编译器从带有 fsc.exe 的单个源文件编译源代码。 F# 编译器将自动解析 System.Windows.Forms 和许多其他常用命名空间之类的依赖项。您还可以提供许多编译器指令来需要其他资源。

使用 VSCode 的示例,带有各种扩展:


  • 另一种方式

启动一个新的 F# 控制台 .NET Framework 项目(不要选择 .NET Core)。

在解决方案资源管理器中右键单击“引用”,然后单击“添加引用...”

在程序集下,查找“System.Windows.Forms”,选择它...

还选择“System.Drawing”,然后点击确定

现在您可以访问这两个命名空间了。

在 Visual Studio 中运行项目之前,您应该替换

[<STAThread>]
Application.Run( new PendulumForm( Visible=true ) )

[<STAThread;EntryPoint>]
let main _ = 
    Application.Run( new PendulumForm( Visible=true ) )
    0

这样你(和 VS)就知道main 实际上在哪里。这个小程序没有必要真正运行它,但是随着你的项目变得更大,VS 会抱怨更多东西在你的项目中的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2012-05-31
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多