2011-04-21 52 views

回答

4

使用System.CodeDom編譯的代碼通常無法訪問F#Interactive中加載的代碼--CodeDom本質上是將C#/ F#源代碼寫入磁盤,然後在代碼上調用命令行編譯器(並且命令行編譯器不能參考代碼在F#Interactive中加載)。

雖然可能有辦法讓它工作 - 您可以使用PowerPack的F#CodeDom提供程序。您可以對其進行修改以生成源代碼(就像它目前所做的那樣),然後將生成的代碼發送到F#Interactive(而不是調用命令行編譯器)。這樣,即時編譯的代碼可以看到F#交互式代碼。

也有一些需要的問題有待解決

  • 是否有可能提供自己的CodeDOM提供商RazorEngine?
  • F#CodeDom提供程序可能無法正確處理由Razor生成的代碼(因此您可能需要修復/解決F#CodeDom提供程序中的一些問題)。您可能還需要對其進行修改以生成可與F#交互使用的良好代碼(例如,刪除頂級命名空間)
  • 您想要使用哪種F#Interactive實例? (以及如何獲得標準輸入,以便您可以在那裏發送您的代碼)
  • 您是否需要加載已編譯的程序集並將其傳回給Razor?我不確定這是否可以用F#Interactive完成。

這些都取決於你的情況 - 但我想可能得到你想要的東西(可能有一些解決方法)。

+0

感謝Tomas。我將研究F#CodeDom。我不是100%確定的,但我相信Razor需要加載程序集,所以FSI很可能是一場糟糕的比賽。最簡單的解決方案是把它變成一個命令行工具。 – 2011-04-21 20:59:10

+0

另一種解決方法是在頂部用@model動態註釋剃鬚刀模板。這會導致模板通過「動態」引用使用f#類型,並避免編譯時依賴於f#類型。 – Eric 2016-04-26 14:59:05

相關問題