System.Windows未在* .fs文件中定义,但在* .fsx文件中定义

时间:2016-12-22 14:54:47

标签: forms f#

如果我在fsx脚本中编写代码,那么会发生什么 {{1}}工作正常,但如果我在fs文件中这样做,那么它说System.Windows没有定义?

此外,我已经阅读并听过fsx和fs几乎相同,只是fsx是交互式的,而fs是要编译的。但是,很多东西在一个中工作,不起作用另一个,反之亦然。

任何提示?

1 个答案:

答案 0 :(得分:2)

就F#语言而言,fsfsx确实几乎相同。区别在于引用的程序集。

当您在FSI中运行脚本时,FSI默认引用一堆程序集,只是为了让您的体验更流畅。其中一个“默认”引用是System.Windows.Forms,它偶然包含System.Windows命名空间,从而使open System.Windows工作。

但是,在使用编译器编译代码时,必须精确指定要引用的程序集。这是故意的。这有助于防止编译的程序引用您实际未使用的程序集,从而防止不必要的膨胀。

因此,如果您希望已编译的文件可以访问System.Windows.Forms,则需要将该引用添加到指定引用的位置,这取决于您的编译方式。

如果您在Visual Studio中使用项目,则可以右键单击该项目并选择“添加引用” 如果您使用的是.NET Core project.json文件,则可以添加对dependencies部分的引用(有关详情,请参阅project.json reference;另请注意project.json is going away soon)。
如果您从命令行使用fsc.exe进行编译,则可以使用-r选项添加引用(有关详情,请参阅fsc.exe options reference)。