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.)