如果我在fsx脚本中编写代码,那么会发生什么 {{1}}工作正常,但如果我在fs文件中这样做,那么它说System.Windows没有定义?
此外,我已经阅读并听过fsx和fs几乎相同,只是fsx是交互式的,而fs是要编译的。但是,很多东西在一个中工作,不起作用另一个,反之亦然。
任何提示?
答案 0 :(得分:2)
就F#语言而言,fs
和fsx
确实几乎相同。区别在于引用的程序集。
当您在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)。