F#声明的命名空间在c#项目中不可用,或通过对象浏览器可见。
我构建了一个普通的F#库项目,但即使在我构建项目并将其引用到我的C#项目之后,我也无法访问所需的命名空间。
我也无法在对象浏览器中看到它,我收到一条错误,告诉我它尚未构建。我正在运行9月发布,有人可以指出我的错误吗?
F#Version 1.9.6.0
(6)编辑:直接引用dll修复了我的问题,引用项目允许我编译但是intellisence不起作用。直接引用dll时,intellisence工作正常。
这是.fs文件中的代码
#light
namespace Soilsiu.Core
module public Process =
open System.Xml.Linq
let private xname (tag:string) = XName.Get(tag)
let private tagUrl (tag:XElement) = let attribute = tag.Attribute(xname "href")
attribute.Value
let Bookmarks(xmlFile:string) =
let xml = XDocument.Load(xmlFile)
xml.Elements <| xname "A" |> Seq.map(tagUrl)
let PrintBookmarks (xmlFile:string) =
let list = Bookmarks(xmlFile)
list |> Seq.iter(fun u -> printfn "%s" u)
(5)编辑:ReSharper 4.0可能成为问题吗?
(4)编辑:当我说对象浏览器无法读取生成的程序集时,我的意思是当我尝试在对象浏览器中打开程序集时,我得到一个错误,告诉我项目尚未构建。我再次使用反射器阅读装配。
(3)编辑:反射器可以反汇编dll但对象浏览器无法读取它。
(2)编辑:我已将我的F#版本升级到1.9.6.2,但结果仍然相同
(1)编辑:我能够将dll反汇编为C#我得到:(这里似乎一切都很好)
namespace Soilsiu.Core
{
[CompilationMapping(7)]
public static class Crawler
[CompilationMapping(7)]
public static class Process
}
[CompilationMapping(7)]
public static class Process
{
// Methods
static Process();
public static IEnumerable<string> Bookmarks(string xmlFile);
public static void PrintBookmarks(string xmlFile);
internal static string tagUrl(XElement tag);
internal static XName xname(string tag);
// Nested Types
[Serializable]
internal class clo@13 : FastFunc<XElement, string>
{
// Methods
public clo@13();
public override string Invoke(XElement tag@9);
}
[Serializable]
internal class clo@17 : FastFunc<string, Unit>
{
// Methods
public clo@17();
public override Unit Invoke(string u);
}
}
答案 0 :(得分:4)
如果您直接引用生成的DLL(即,不是通过项目引用,而是通过文件引用),该怎么办?
答案 1 :(得分:1)
也许IntelliSense搞砸了?当您尝试在C#中使用它时会得到什么编译器错误?当你说“对象浏览器无法读取它”时,这是什么意思?
为了它的价值,我将其添加到F#库项目中,从C#控制台应用程序引用它(项目),并且能够使用它。虽然IntelliSense最初没有工作。 (不得不重建。)
如果您可以制作一个可靠的复制品,我建议通过电子邮件将其发送给F#bugs别名(fsbugs)。
答案 2 :(得分:1)
我尝试过同样的事情。看起来好像Visual Studio和Resharper 4.0由于某种原因不理解F#。如果你忽略了红色文字的海洋和缺乏intellisense,它将编译好。
答案 3 :(得分:1)
尝试
确保C#项目的目标是FULL .NET(非客户端配置文件)。
将对程序集的引用添加到F#项目使用的C#项目中。