2013-04-19 2 views
1

F # 라이브러리를 구조화하려고합니다. ,f # 스크립트를 호출하여 func 모듈을 호출하는 방법?

  • 나는 단지 .fs 소스 파일에서 C#을 라이브러리를 참조 할 수 있습니다

  • 및 소스 파일이 스크립트 파일을 .fsx 할 수 없습니다 .fs : 지금까지 그 "가 나타납니다."

이 중 하나라도 맞습니까? 내가 읽은 예제들은 오픈을 사용한다고 말하지만 그것은 .fs 파일에서만 작동합니다.

같은 프로젝트에 (FSI) F # 대화를 통해 사용되는 스크립트 파일에 대한

#r "System.Drawing.dll" 

의 버전이 있습니까?

또한 최상위 모듈과 하위 모듈의 구문 차이가 약간 이상합니다. 최상위 레벨이 같지 않다는 것을 이상하게 보아라.

module Utilities 

    module et = 

왜 일관성이없고 모든 것에 "module moduleName ="이 있습니까?

+0

내가 메신저 이해하지 생각 : 모듈 불일치에 관해서는

는 주된 이유는 최상위에 module Foo 또는 namespace Foo를 사용할 때, 당신은 파일의 나머지 부분을 들여 필요가 없다는 것입니다 당신은 정확하게,하지만 당신은 VS에서 F #에 대한 파일 순서가 중요하다는 것을 알고 있습니까? http://stackoverflow.com/questions/2908473/f-compiler-order-of-source-files – fableal

답변

4

F #의 Visual Studio에서 "참조"는 현재 프로젝트에만 적용된다는 점에 유의해야합니다. 스크립트 파일에서 작업하는 경우에는 프로젝트에서 참조하는 라이브러리가 표시되지 않습니다.

(예 Script.fsx)을, 당신이 쓸 수있는 스크립트 파일의 라이브러리를 참조하십시오 (당신은 모두 절대 경로와 상대 경로를 사용할 수 있습니다) : 당신이 아닌 파일을로드하려면

#r @"C:\<path_to_library>\library.dll" 

을 스크립트 (예 : Library.fs) 스크립트 파일에서 사용할 수 : 파일을 참조 할 필요가 일부 라이브러리를 사용하고, 그래서 만약

#load "Library.fs" 

fs 파일 자체가 #r 같은 지침을 포함 할 수 없습니다, 당신은 필요 메인 스크립트 파일에 #r 지시문이 있어야합니다 (소스 파일을로드하기 전에 라이브러리를 참조).

module Foo 

let bar = 10 
module Sub = 
    let bar = 12 
+0

"원본 파일을로드하기 전에 라이브러리를 참조하기 위해 기본 스크립트 파일에 #r 지시문이 있어야합니다." - 그건 불쌍한 것 같아. 당신은 그것들이 조금 더 조화를 이루도록 목표를 세울 것이라고 생각합니까, 아니면 실제로는별로 문제가되지 않습니까? – sgtz

+0

.dll 대신 .csproj 또는 .fsproj 파일을 가리킬 수 있습니까? proj \ bin \ debug \ proj.dll을 가리키는 것은 가능한 한 부드럽 지 않습니다. 그래도 고마워. #load는 예상대로 작동합니다. – sgtz

관련 문제