在来回更改文件位置和奇怪的命名空间行为

时间:2015-05-16 17:52:32

标签: f# f#-3.0

我使用的是F#电动工具,它为我提供了一种在F#解决方案中创建文件夹的便捷方式。

现在,我在解决方案中有2个类似的控制台应用项目。两个项目都包含一个util文件夹。 在一个项目中,util文件夹包含带功能的命名空间模块。 在其他项目中,util文件夹包含命名空间枚举和类定义。

命名空间按以下方式完成:ProjectName.Folder

这两个项目的Program.fs文件都包含" EntryPoint"主功能。 Program.fs是解决方案中的最后一个文件。 主要功能在" ProjectName"命名空间。

因为两个文件都具有相同的根命名空间,所以当我尝试"打开"时,我希望看到Program.fs文件中的子命名空间。子命名空间并使用其他文件中的代码。

那么在第一个带有模块的项目中工作但不在另一个包含子命名空间中的类定义的项目中...当我尝试在第二个项目中打开一个子命名空间时,我需要提供完全限定的命名空间,即使两个文件共享相同的命名空间根目录。

在第一个项目中,我可以直接引用子命名空间而不指定根命名空间 - 它只是可见。

这让我很困惑,特别是有时候我会通过在项目中上下移动带有main()的Program.fs文件来解决编译问题,然后突然我可以编译。

如果描述的问题与解决方案资源管理器中看不到的项目结构(文件)中的问题有关,或者我遗漏了与F#语法相关的内容以及如何使用(开放)命名空间模块与函数进行比较,您是否有任何想法?命名空间类(类型)? 可能是F#powertools在这些文件夹中创建文件夹和文件时会以某种方式导致问题吗?

我可以提供代码示例。它们主要来自教程,但我想尽量缩短问题。

编辑1

我刚刚将新代码中的代码合并到一起来测试,事实证明, 当我打开一个命名空间模块时,a只能提供该模块的相对命名空间路径,但是当我打开一个名称空间时为了使用那里定义的类,我需要提供该命名空间的完全限定路径,即使我从同一个根命名空间打开该命名空间。 有人可以确认此行为吗? 与此同时,我要挖掘http://en.wikibooks.org/wiki/F_Sharp_Programming/Modules_and_Namespaces

1 个答案:

答案 0 :(得分:4)

对于包含文件夹的文件顺序,请使用xml编辑器检查实际的fsproj。我有PowerTools创建正确的文件路径,即Folder \ MyFile.fs,但把它放在错误的地方。文件夹中的所有文件必须相互直接显示。例如,你不能这样做一个订单:

FolderA \ File1.fs,File2.fs,FolderA \ File3.fs