Kompilieren mit Standalone-Flag führt zu Kompilierungsfehlern im Clientcode

Ich versuche zu kompilierenZero29 mit dem--standalone Compiler-Flag. Das Projekt selbst lässt sich problemlos kompilieren, aber ich habe ein Unit-Test-Projekt, das Code im Zero29-Projekt ausführt, obwohl es sich um ein ausführbares Programm (.exe) handelt.

Alles funktioniert gutohne das--standalone Zusammenstellungsflag.

Wenn ich jedoch die--standalone Kompilierungsflag für das Zero29-Projekt, das Zero29-Projekt wird einwandfrei kompiliert, aber im Unit-Test-Projekt beschwert sich der Compiler über diese diskriminierte Uniondefiniert im Zero29 Projekt:

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

Das Unit-Test-Projekt verweist direkt auf das Zero29-Projekt:

Zero29.UnitTests --references -> Zero29 (wobei --standalone hinzugefügt wird)

Wenn ich versuche, die gesamte Lösung zu kompilieren, kompiliert das Zero29-Projekt mit der--standalone flag, aber dann schlägt die Kompilierung von Zero29.UnitTests fehl. Es gibt mehrere Fehler, die jedoch alle gleich sind. Hier ist ein einziges Beispiel:

Fehler FS0039: Der Wert oder Konstruktor 'Assign' ist nicht definiert

Welches zeigt auf die dritte Zeile vondieser Code:

let ParseAssignVersionReturnsCorrectResult(version : string) =
    let actual = [| "-a"; version |] |> Args.Parse
    verify <@ [Assign(Version version)] = (actual |> Seq.toList) @>

Das Seltsame ist, dass sich der Compiler beschwertAssign In der dritten Zeile dieses Code-Snippets steht esnicht beschweren sich über die Verwendung vonArgs.Parse, obwohl es istdefiniert in der gleichen Code-Datei wie dieArg Diskriminierte Union.

Warum tut es das und wie kann ich dieses Problem beheben?

(Ich habe versucht, das Problem hier zu destillieren, aber die von mir bereitgestellten Links verweisen auf die eigentlichen Codedateien auf GitHub, falls weitere Informationen erforderlich sind.)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage