Могу ли я получить доступ к типам, созданным в F # Interactive с System.CodeDom? - PullRequest
2 голосов
/ 21 апреля 2011

Я создаю свой тип в FSX и передаю эти типы в шаблонизатор Razor с открытым исходным кодом Проект RazorEngine .

Хостинг Razor вне ASP.NET требует компиляции шаблонов Razor. Если я передам модель, созданную в FSX, в шаблон, смогу ли System.CodeDom иметь доступ к этому типу, созданному FSI? Основная ошибка, которую я получаю: «Не удалось найти тип или имя пространства имен« FSI_0004 »».

1 Ответ

4 голосов
/ 22 апреля 2011

Код, скомпилированный с использованием System.CodeDom, обычно не может иметь доступ к коду, загруженному в F # Interactive - CodeDom, по сути, записывает исходный код C # / F # на диск, а затем вызывает компилятор командной строки для кода (и компилятор командной строкине может ссылаться на код, загруженный в F # Interactive).

Возможно, есть способ заставить его работать - Вы можете использовать провайдера F # CodeDom из PowerPack .Вы можете изменить его, чтобы сгенерировать исходный код (как это происходит в настоящее время), а затем отправить сгенерированный код в F # Interactive (вместо вызова компилятора командной строки).Таким образом, код, скомпилированный на лету, может видеть интерактивный код F #.

Есть некоторые проблемы, которые необходимо решить

  • Можно ли предоставить своего собственного поставщика CodeDomRazorEngine?
  • Поставщик F # CodeDom может некорректно обрабатывать код, сгенерированный Razor (поэтому вам может потребоваться исправить некоторые проблемы в поставщике F # CodeDom).Вам также может понадобиться изменить его, чтобы он генерировал код, который прекрасно работает с F # Interactive (например, удаляет пространства имен верхнего уровня)
  • Какой экземпляр F # Interactive вы хотите использовать?(И как получить стандартный ввод, чтобы вы могли отправить туда свой код)
  • Вам нужно загрузить скомпилированную сборку и передать ее обратно в Razor?Я не уверен, что это можно сделать с помощью F # Interactive.

Все это зависит от вашего сценария - но я предполагаю, что возможно получить то, что вы хотите (возможно, с некоторыми обходными путями).

...