2008-10-16 1 views
8

F # 선언 된 네임 스페이스는 C# 프로젝트에서 사용할 수 없거나 개체 브라우저에서 볼 수 있습니다.F # 선언 된 네임 스페이스는 C# 프로젝트에서 사용할 수 없거나 개체 브라우저를 통해 볼 수 있습니다.

나는 일반적인 F # 라이브러리 프로젝트를 만들었지 만, 프로젝트를 빌드하고 C# 프로젝트로 참조한 후에도 원하는 네임 스페이스에 액세스 할 수 없습니다.

개체 브라우저에서도 볼 수 없으므로 빌드되지 않았다는 오류 메시지가 나타납니다. 누군가가 내 오류를 지적 할 수있는 9 월 릴리스에서 실행 중입니까?

F # 버전 1.9.6.0

(6) 편집 : DLL이 직접 내 문제를 해결했다 참조하는 프로젝트를 참조하는 것은 나를 컴파일 할 수 있지만 intellisence이 작동하지 않습니다. dll을 직접 참조하면 인텔리전스가 완벽하게 작동합니다. 4.0 문제가 될 ReSharper에서 수 :


이는 .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) 편집 파일입니까?

(4) 편집 : 개체 브라우저에서 결과 어셈블리를 읽을 수 없다고 말하면 개체 브라우저에서 어셈블리를 열려고하면 프로젝트가 아직 작성되지 않았다는 오류가 발생합니다. . 다시 나는 반사체를 사용하여 어셈블리를 읽을 수있다.

(3) 편집 : Reflector가 dll을 디스 어셈블 할 수 있지만 개체 브라우저에서 읽을 수 없습니다.

(2) 편집 : 나는 같은 결과를 여전히 1.9.6.2 내 F # 버전을 업그레이드하고있다

(1) 편집 : (모두가 될 것으로 보인다 : 내가 얻을 C 번호에 DLL을 분해 할 수 있었다) 여기에 잘

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 [email protected] : FastFunc<XElement, string> 
    { 
     // Methods 
     public [email protected](); 
     public override string Invoke(XElement [email protected]); 
    } 

    [Serializable] 
    internal class [email protected] : FastFunc<string, Unit> 
    { 
     // Methods 
     public [email protected](); 
     public override Unit Invoke(string u); 
    } 
} 

답변

4

당신은 무엇을 (즉,하지 프로젝트 참조를 통해,하지만) 파일 참조를 통해 직접 생산 된 DLL을 참조하는 경우?

1

어쩌면 IntelliSense가 엉망이 되었습니까? C#에서 사용할 때 어떤 컴파일러 오류가 발생합니까? "개체 브라우저가 읽을 수 없다"는 말은 그게 무슨 뜻입니까?

그게 무슨 가치가 있는지, 나는 이것을 F # 라이브러리 프로젝트에 추가하고 C# 콘솔 앱에서 프로젝트 (프로젝트)를 참조하여 사용할 수있었습니다. IntelliSense는 처음에는 작동하지 않았습니다. (다시 만들어야했다.)

만약 당신이 단단한 repro을 만들 수 있다면, 나는 그것을 F # bugs alias (fsbugs)에 이메일로 보내달라고 제안했다.

+0

C# 프로젝트의 f # 프로젝트를 다시 작성 했습니까? –

+0

모두 다시 작성되었습니다. 파일 참조가이를 수정 했습니까 (표시된 답변 이었습니까?)? 여전히 버그 일 것입니다.보고해야합니다. – MichaelGG

1

나는 똑같은 것을 시도했다. Visual Studio와 Resharper 4.0이 F #을 이해하지 못하는 것처럼 보입니다. 빨간 텍스트의 바다와 인텔리 센스의 부족을 무시하면 잘 컴파일됩니다.

1

  1. 는 C# 프로젝트가 FULL .NET (NOT 클라이언트 프로파일)을 대상으로되어 있는지 확인하십시오.

  2. 어셈블리에 대한 참조를 F # 프로젝트에서 사용되는 C# 프로젝트에 추가합니다.

+0

Visual Studio 2008에서는 클라이언트 프로파일이 없었기 때문에 이것은 F # 및 .Net 4.0에 적용됩니다. 또는 나는이 하나에 착각 할지도 모른다. .. –

관련 문제