Ich versuche, Zero29 mit dem --standalone
Compiler-Flag zu kompilieren. Das Projekt selbst kompiliert gut, aber ich habe ein Unittest-Projekt, das einige Code in dem Zero29-Projekt testet, auch wenn es ein ausführbares Programm (.exe) ist.
Alles funktioniert gut ohne das --standalone
Kompilierungsflag.
Jedoch, wenn ich das --standalone
Kompilierungsflag zum Zero29 Projekt hinzufüge, kompiliert das Zero29 Projekt gut, aber im Unittest-Projekt beschwert sich der Compiler über diese diskriminierte Union die im Zero29 Projekt definiert ist:
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 Unittest-Projekt referenziert direkt das Zero29 Projekt:
Zero29.UnitTests --references--> Zero29 (wo --standalone hinzugefügt ist)
Wenn ich versuche, die gesamte Lösung zu kompilieren, kompiliert das Zero29 Projekt mit dem --standalone
Flag, aber dann schlägt die Kompilierung von Zero29.UnitTests fehl. Es gibt mehrere Fehler, aber sie sind alle gleich, also hier ist ein einzelnes Beispiel:
Fehler FS0039: Der Wert oder Konstruktor 'Assign' ist nicht definiert
Was auf die dritte Zeile von diesen Code zeigt:
let ParseAssignVersionReturnsCorrectResult(version : string) =
let actual = [| "-a"; version |] |> Args.Parse
verify <@ [Assign(Version version)] = (actual |> Seq.toList) @>
Das Seltsame ist, dass während der Compiler sich über Assign
in der dritten Zeile dieses Codeausschnitts beschwert, es sich nicht über die Verwendung von Args.Parse
gleichen Code-Datei wie die Arg
diskriminierte Union definiert ist.
Warum tut er das und wie kann ich dieses Problem lösen?
(Ich habe versucht, das Problem hier zusammenzufassen, aber die von mir bereitgestellten Links verweisen auf die tatsächlichen Code-Dateien auf GitHub, falls mehr Informationen benötigt werden.)