Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以访问在F#Interactive with System.CodeDom中创建的类型吗?_F#_Razor - Fatal编程技术网

我可以访问在F#Interactive with System.CodeDom中创建的类型吗?

我可以访问在F#Interactive with System.CodeDom中创建的类型吗?,f#,razor,F#,Razor,我正在FSX中创建我的类型,并将这些类型通过开放源代码传递到Razor模板引擎中 在ASP.NET之外托管Razor需要编译Razor模板。如果我将在FSX中创建的模型传递到模板中,System.CodeDom是否能够访问由FSI创建的类型?我得到的基本错误是“找不到类型或名称空间名称‘FSI_0004’。使用系统编译的代码。CodeDom通常无法访问F#Interactive中加载的代码-CodeDom基本上将C#/F#源代码写入磁盘,然后在代码上调用命令行编译器(并且命令行编译器无法引用F#

我正在FSX中创建我的类型,并将这些类型通过开放源代码传递到Razor模板引擎中


在ASP.NET之外托管Razor需要编译Razor模板。如果我将在FSX中创建的模型传递到模板中,System.CodeDom是否能够访问由FSI创建的类型?我得到的基本错误是“找不到类型或名称空间名称‘FSI_0004’。

使用系统编译的代码。CodeDom通常无法访问F#Interactive中加载的代码-CodeDom基本上将C#/F#源代码写入磁盘,然后在代码上调用命令行编译器(并且命令行编译器无法引用F#Interactive中加载的代码)

也许有一种方法可以让它工作——您可以使用来自的F#CodeDom提供程序。您可以修改它以生成源代码(正如它当前所做的那样),然后将生成的代码发送到F#Interactive(而不是调用命令行编译器)。这样,动态编译的代码可以看到F#Interactive代码

有一些问题需要解决

  • 是否可以向RazorEngine提供您自己的CodeDom提供程序
  • F#CodeDom提供程序可能无法正确处理Razor生成的代码(因此您可能需要修复/解决F#CodeDom提供程序中的一些问题)。您还可能需要修改它以生成与F#interactive配合良好的代码(例如,删除顶级命名空间)
  • 您希望使用什么样的F#Interactive实例?(以及如何获取标准输入,以便将代码发送到那里)
  • 您是否需要加载已编译的程序集并将其传递回Razor?我不确定是否可以使用F#Interactive完成此操作

这些都取决于您的场景,但我想可能会得到您想要的(可能需要一些变通方法).

谢谢Tomas。我将研究F#CodeDom。我不是100%确定,但我认为Razor需要加载程序集,因此FSI很可能是不匹配的。最简单的解决方案是将其转换为命令行工具。另一种解决方法是在Razor模板顶部添加@model dynamic注释。这会导致模板使用f#类型通过“动态”引用,避免了编译时对f#类型的依赖。