开发者

How to compile F# library from another F# program

I want to make my Application configuration as F# file wich will be compiled to dll. (like XMonad configuration with xmonad.hs on haskell). I found it more interesting and just better way then using XML serialization.

So is there any way how can I compile single file (or more) to Library with some configuration like

module RNExcel.Repository

open RNExcel.Model

    type ExpenseReportRepository() =
        member x.GetAll() =
            seq{ yield {Name="User1" 
                   开发者_如何转开发     Role="someRole" 
                        Password = "123321"
                        ExpenseLineItems = 
                            [{ExpenseType="Item1" 
                              ExpenseAmount="50"};
                             {ExpenseType="Item2" 
                              ExpenseAmount="50"}]}
                 yield {Name="User2"
                        Role="Estimator" 
                        Password = "123123"
                        ExpenseLineItems = 
                            [{ExpenseType="Item1" 
                              ExpenseAmount="50"};
                             {ExpenseType="Item2" 
                              ExpenseAmount="125"}]}    }

my idea was to run shell .... and msbuild the project , but I don't think it will works for every user with .net 4


Check out the F# Power Pack, specifically the FSharp.CodeDom library. You can use this library to compile F# code at run-time and, with a little Reflection thrown in, can likely achieve your goal of code-as-configuration with minimal fuss.


I think that using CodeDOM provider from the PowerPack as Ben suggested is a way to go. I'd just like to add a few things (and it didn't fit into the comment box).

To parse and compile the F# code with the configuration, you need just to compile the source file that the users write using F# PowerPack. The compilation part of PowerPack is complete and works just fine. It invokes the F# compiler under the cover and gives you the compiled assembly back. The only problem is that the users of your application will need to have F# compiler installed (and not just the redist).

The incomplete part of F# CodeDOM provider is generating F# code from CodeDOM trees (because the trees were not designed to support F#), but that's not needed in this case.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜