我有一个库,Library_1,其正确编译,并限定了提供类型:
type modelforexcel = FSharpx.ExcelFile<@"template.xls", "Brokernet", true>
当我包括另一个项目这个库,Library_2,编译器抱怨说,它无法找到任何“Brokernet.template.xls”,在新的 Library_2项目的根。
Error 4 'C:\Library_2\template.xls' could not be found. Check the spelling of the file name, and verify that the file location is correct.
我想指的是原来的“Brokernet.template.xls”的类型,所以我想提供给它的完整路径,但
type modelforexcel =
FSharpx.ExcelFile<__SOURCE_DIRECTORY__+@"Brokernet.template.xls", "Brokernet", true>
不工作,我想这不是一个文字(?),但“很明显”定义这个字面也不管用
[<Literal>]
let a = __SOURCE_DIRECTORY__+@"Brokernet.template.xls"
是否有任何的方式来定义这样的“动态文字”?
编辑
有趣的是,如果我定义中的第一个库我的一个模块内的类型
module Load =
[<Literal>]
let a = @"Brokernet.template.xls"
type modelforexcel = FSharpx.ExcelFile< a , "Brokernet", true>
然后,类型不是“再生”当在第二个使用第一库,并且类型提供者不抱怨文件缺席的第二库的根的。
这揭示在F#这可能是最好的主人暴露的编译模型深刻的见解。 我只是说,作为一个粗野的男人,说:“代码模块”
PS:我想这就是这将通过适当的上演汇编来解决一个更的问题。