2

当我构建我的解决方案时,一切都很顺利。但是,当我尝试在 FSI 中运行脚本时,我得到以下信息:

error FS0193: internal error: Could not load type 'Position' from assembly 'FSI-ASSEMBLY, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'

我试图四处浏览,但我仍然不明白是什么导致了错误。从 MS connect 看来,fsi 编译器似乎存在问题,已经解决

定义的代码片段Position如下所示:

type Position = 
    struct   
        val Shares: NrShares
        val BuyPrice: Price 
        new (nrShares: NrShares, buyPrice: float) = { Shares = nrShares; BuyPrice = buyPrice}

        /// Merge two positions.
        static member inline (+!) (one: Position, other: Position) =
            let addToPosition (one: Position) (other: Position) = 
                let nrShares = one.Shares + other.Shares
                let avgprice = (one.Shares * one.BuyPrice + other.Shares * other.BuyPrice) / nrShares
                Position (nrShares, avgprice)

            // Sell out or partially an existing position. Buy price is not updated
            let sellFromPosition (one: Position) (other: Position) = 
                let newShares = one.Shares - other.Shares
                Position (newShares, one.BuyPrice)

            if (sign(one.Shares) = sign(other.Shares))
            then addToPosition one other
            else sellFromPosition one other
end   

这里有什么问题?谢谢!

编辑一个

在我当前的设置中,我有一个 fsx 脚本LoadScript.fsx,我在其中使用指令加载所需的 dll 文件,#r然后使用指令打开所需的模块#open

LoadScript.fsx由我编写实际计算的主要脚本调用。fsx 脚本链允许我隐藏样板代码。我只是向客户展示带有计算的主要脚本,一切看起来都更整洁。

这个脚本“链”fsx一直在工作。直到昨天,当我从一个新.fs文件中添加新模块时。

我正在尝试隔离产生问题的代码部分。这很难,因为error消息没有指向特定的代码。

奇怪的是,当我直接运行时,LoadScript.fsx一切都没有任何问题。LoadScript.fsx当我从另一个脚本调用时,Fsi 编译失败:

#if INTERACTIVE
#load "LoadScript.fsx"
#endif

这种奇怪行为的原因可能是什么?有什么提示吗?

4

0 回答 0