2013-05-02 107 views
10

有点F#初学者。我试图通过首先在脚本(fsx)文件中输入它来在交互式窗口中测试我的一些XmlTypeProvider代码。该脚本文件将无法识别以下脚本无法识别FSharp.Data

open FSharp.Data // gives "The namespace or module 'FSharp' is not defined" 

一切都已经加入到参考,并.FS文件似乎没有任何问题找到XmlTypeProvider参考,但由于某些原因,在同一项目中的脚本不。我甚至有代码在.fs文件中工作。

我用nuget添加了FSharp.Data,所有东西似乎都正确添加。我在这里错过了什么?

+1

http://stackoverflow.com/questions/3102472/fc-fsx-script-files-and-project-references的FSX文件不使用项目引用(fsi也不使用)。您需要手动引用这些文件。看到这个帖子寻求帮助。 – mydogisbox 2013-05-02 17:12:43

+1

这里有一个更彻底的写作:http://blogs.msdn.com/b/chrsmith/archive/2008/09/12/scripting-in-f.aspx – mydogisbox 2013-05-02 18:07:48

+0

谢谢克里斯。我已经阅读了几篇你的文章,但不是那个! – user2344035 2013-05-02 18:35:57

回答

5

顺便说一句,上周我只是在调试这个错误。基本上有三种可能的原因:

  • 无法找到文件。最明显的一点是F#实际上找不到dll文件。确保引用是正确的(检查项目属性引用),或确保您#r指向正确的文件(使用F#脚本文件时)

  • 类型供应商不被信任。类型提供程序被Visual Studio阻止。如果您在第一次加载提供程序时单击“禁用”,就会发生这种情况。要解决这个问题,请转到“工具” - “选项” - “F#工具” - “类型提供程序”并启用类型提供程序(选中“可信”)。

  • 该DLL被操作系统阻止。最后,如果dll来自不可信来源,则Windows可能会阻止它(这种情况尤其会在您下载zip文件并使用Windows解压文件时发生)。要解锁文件,请转到文件属性,然后点击“取消阻止”。有一个good description here.

9

将脚本中的引用添加到包含FSharp.Data.dll的nuget packages文件夹中。该文件夹还包含了设计师的DLL(FSharp.Data.DesignTime.dll)

#r @"<your nuget packages folder>\FSharp.Data.2.1.0\lib\net40\FSharp.Data.dll" 
+0

把我扔掉的事情是,只要我开始输入那个字符(即#r“”),VS就会给我扭曲的线条。它实际上是在设计时解析字符串。所以当我终于找到DLL时,那条波浪线消失了。 – mac10688 2015-12-21 19:01:06