希望这很容易。我有一个带有两个文件(Program.fs,Stack.fs)的F#项目(最新的F#CTP)。在Stack.fs中,我有一个简单的命名空间和类型定义
Stack.fs
namespace Col
type Stack=
...
现在我尝试通过声明
在Program.fs中包含命名空间open Col
这不起作用,并且给出了错误“未定义名称空间或模块Col”。然而,它是在同一个项目中定义的。我必须遗漏一些明显的东西
答案 0 :(得分:76)
项目中的文件顺序是什么? Stack.fs需要在Program.fs的Program.fs之前才能“看到”它。
另见
的开头http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!444.entry
和
的结尾http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!347.entry
答案 1 :(得分:41)
我遇到了同样的问题,你是对的,编译器会考虑文件的顺序。您可以使用与.fs文件关联的上下文菜单中的“上移/下移”项来代替“删除”和“添加”模式。 (Alt-Up和Alt-Down是大多数标准键绑定中的快捷键)
答案 2 :(得分:9)
以上所有都是正确的,但在VS2013中如何做到这一点是另一个问题。我必须在Notepad ++中编辑 .fsproj 文件并设置ItemGroup节点的顺序。在这种情况下,它看起来像这样:
<ItemGroup>
<Compile Include="Stack.fs" />
<Compile Include="Program.fs" />
<None Include="App.config" />
</ItemGroup>
答案 3 :(得分:1)
我遇到了同样的问题,确实是文件的排序。但是,上面的链接没有描述如何在Visual Studio 2008 F#1.9.4.19中修复它。
如果您打开一个模块,请确保您的源文件在解决方案资源管理器中的依赖项之后 。只需右键单击您的源并选择“删除”。然后重新添加它。这将使它出现在列表的底部。希望你没有循环依赖。
答案 4 :(得分:0)
我使用的是Visual Studio for Mac-8.1.4,并且我注意到某些.fs文件未标记为“编译”。您可以通过查看构建输出来查看此内容,并查看所有文件是否都在正确的顺序中。
我不得不手动确保某些文件被标记为“编译”,并且必须手动上下移动它们,直到“占用”。