我在FSX中創建我的類型,並將這些類型傳遞到開放源代碼RazorEngine project的Razor模板引擎。我可以通過System.CodeDom訪問在F#Interactive中創建的類型嗎?
在ASP.NET之外託管Razor需要編譯Razor模板。如果我將在FSX中創建的模型傳遞到模板中,System.CodeDom是否可以訪問由FSI創建的類型?我得到的基本錯誤是「無法找到類型或名稱空間名稱FSI_0004」。
我在FSX中創建我的類型,並將這些類型傳遞到開放源代碼RazorEngine project的Razor模板引擎。我可以通過System.CodeDom訪問在F#Interactive中創建的類型嗎?
在ASP.NET之外託管Razor需要編譯Razor模板。如果我將在FSX中創建的模型傳遞到模板中,System.CodeDom是否可以訪問由FSI創建的類型?我得到的基本錯誤是「無法找到類型或名稱空間名稱FSI_0004」。
使用System.CodeDom
編譯的代碼通常無法訪問F#Interactive中加載的代碼--CodeDom本質上是將C#/ F#源代碼寫入磁盤,然後在代碼上調用命令行編譯器(並且命令行編譯器不能參考代碼在F#Interactive中加載)。
雖然可能有辦法讓它工作 - 您可以使用PowerPack的F#CodeDom提供程序。您可以對其進行修改以生成源代碼(就像它目前所做的那樣),然後將生成的代碼發送到F#Interactive(而不是調用命令行編譯器)。這樣,即時編譯的代碼可以看到F#交互式代碼。
也有一些需要的問題有待解決
這些都取決於你的情況 - 但我想可能得到你想要的東西(可能有一些解決方法)。
感謝Tomas。我將研究F#CodeDom。我不是100%確定的,但我相信Razor需要加載程序集,所以FSI很可能是一場糟糕的比賽。最簡單的解決方案是把它變成一個命令行工具。 – 2011-04-21 20:59:10
另一種解決方法是在頂部用@model動態註釋剃鬚刀模板。這會導致模板通過「動態」引用使用f#類型,並避免編譯時依賴於f#類型。 – Eric 2016-04-26 14:59:05