我尝试使用--standalone
编译器标志编译Zero29。项目本身编译得很好,但我有一个单元测试项目,在Zero29项目中运行一些代码,即使它是一个可执行程序(.exe)。
一切正常没有 --standalone
编译标记。
但是,当我将--standalone
编译标志添加到Zero29项目时,Zero29项目编译得很好,但是在单元测试项目中,编译器抱怨这个被区分的联盟defined in the Zero29 project:
namespace Ploeh.ZeroToNine
open System
open Ploeh.ZeroToNine.Versioning
type Arg =
| Assign of Version
| AssignRank of Rank * int
| Increment of Rank
| ListVersions
| ShowHelp
| Unknown of string list
单元测试项目直接引用Zero29项目:
Zero29.UnitTests --references - > Zero29(其中--standalone被添加)
当我尝试编译整个解决方案时,Zero29项目使用--standalone
标志进行编译,但随后编译Zero29.UnitTests失败。有几个错误,但它们都是一样的,所以这里只是一个例子:
错误FS0039:值或构造函数'分配'未定义
指向this code的第三行:
let ParseAssignVersionReturnsCorrectResult(version : string) =
let actual = [| "-a"; version |] |> Args.Parse
verify <@ [Assign(Version version)] = (actual |> Seq.toList) @>
奇怪的是,虽然编译器在此代码段的第三行中抱怨Assign
,但没有抱怨使用Args.Parse
,即使它是defined in the same code file as the Arg
Discriminated Union。
为什么会这样做,我该如何解决这个问题呢?
(我试图在这里解决问题,但我提供的链接指向GitHub上的实际代码文件,如果需要更多信息。)