2011-04-21 3 views
2

FSX에서 내 유형을 만들고 오픈 소스 RazorEngine project을 사용하여 Razor 템플릿 엔진에 이러한 유형을 전달합니다.System.CodeDom을 사용하여 F # Interactive로 만든 형식에 액세스 할 수 있습니까?

ASP.NET 외부에서 Razor를 호스팅하려면 Razor 템플릿을 컴파일해야합니다. FSX에서 만든 모델을 템플릿에 전달하면 System.CodeDom은 FSI에서 만든 해당 유형에 액세스 할 수 있습니까? 기본 오류는 "형식 또는 네임 스페이스 이름 'FSI_0004'을 (를) 찾을 수 없습니다"입니다.

답변

4

System.CodeDom을 사용하여 컴파일 된 코드는 일반적으로 F # Interactive에로드 된 코드에 액세스 할 수 없습니다. CodeDom은 기본적으로 C#/F # 소스 코드를 디스크에 쓴 다음 코드에서 명령 행 컴파일러를 호출합니다. F # Interactive에서로드 된 참조 코드).

작동하는 방법이있을 수 있습니다 - PowerPack에서 F # CodeDom 공급자를 사용할 수 있습니다. 소스 코드를 생성하도록 (현재는 그대로) 소스 코드를 수정 한 다음 생성 된 코드를 F # Interactive (명령 행 컴파일러 호출 대신)로 보낼 수 있습니다. 이렇게하면 컴파일 된 코드가 F # Interactive 코드를 볼 수 있습니다.

해야 할 몇 가지 문제

  • 이 RazorEngine에 자신의 된 CodeDom 공급자를 제공 할 수있다

    이 해결하는거야?
  • F # CodeDom 공급자가 Razor에서 생성 된 코드를 올바르게 처리하지 못할 수 있습니다 (따라서 F # CodeDom 공급자에서 몇 가지 문제를 수정/해결해야 할 수도 있음). F # interactive (예 : 최상위 네임 스페이스 제거)로 잘 작동하는 코드를 생성하려면이 코드를 수정해야 할 수도 있습니다.
  • F # Interactive의 어떤 인스턴스를 사용 하시겠습니까? (표준 입력을 받아 코드를 보낼 수있는 방법)
  • 컴파일 된 어셈블리를로드하여 Razor로 다시 전달해야합니까? F # Interactive로이 작업을 수행 할 수 있는지 확실하지 않습니다.

이들은 모두 시나리오에 따라 다르지만 원하는 해결 방법이있을 수 있습니다 (일부 해결 방법이있는 경우도 있음).

+0

고마워요. 토마스. F # CodeDom에 대해 살펴 보겠습니다. 나는 100 % 확신 할 수는 없지만 Razor가 어셈블리를로드해야한다고 믿기 때문에 FSI가 가장 적합하지 않을 수 있습니다. 가장 간단한 해결책은 이것을 명령 행 도구로 바꾸는 것입니다. –

+0

또 다른 해결 방법은 상단에 @ 모델 동적 인 면도기 템플릿을 주석으로 추가하는 것입니다. 이로 인해 템플릿은 '동적'참조를 통해 f # 유형을 사용하게되고 f # 유형의 컴파일 시간 의존성을 피하게됩니다. – Eric

관련 문제