2014-01-20 2 views
24

Beide Dateien scheinen zusammen mit FSharp.Core.dll im F # -Verzeichnis zu liegen. Beide Dateien scheinen eine ständige Quelle von Problemen zu sein, wenn man vergisst, sie mit FSharp.Core.dll zusammenzufügen. Sie scheinen Binärdateien zu sein, so dass ich ihren Zweck nicht aufdecken konnte.Was sind die FSharp.Core.optdata und FSharp.Core.sigdata Dateien von F #?

Ich googelte ein wenig beide Dateien, aber es scheint keine klare Antwort auf meine Frage zu geben. Also ... was ist ihre Funktion in F #?

+0

Ich denke, es ist im Zusammenhang mit Optimierungsdaten und kann durch "--nooptimizationdata" unterdrückt werden –

+0

Das scheint nicht wahr zu sein. Ich hatte eine Anwendung, die ohne diese beiden Dateien abstürzte, also legte ich sie in das Ausgabeverzeichnis. Ich habe versucht, es mit dieser Flagge und keine Dateien laufen zu lassen und es ist wieder abgestürzt. :( –

+2

Das sind so komisch. Ich habe gerade ein F # NuGet-Paket mit FSharp.Core.dll enthalten. Wenn das Paket in einem F # -Bibliotheksprojekt verwendet wird, wird das Projekt nicht kompiliert, wenn die .sigdata und .optdata-Dateien enthalten sind (im NuGet-Paket). Allerdings sind nur FSharp.Core.dll und ** nicht ** die sig/optdata-Dateien im Versionsverzeichnis der Bibliothek enthalten, und alles läuft ohne sie einwandfrei. In diesem Fall scheint es so werden nur während der Kompilierung benötigt –

Antwort

17

Optdata ist definitiv Optimierungsdaten, es ist als Teil der EncodeOptimizationData Funktion im Compiler geschrieben. FSharp.Core enthält diese Informationen in einer externen Datei und nicht im Ressourcenmanifest.

sigdata ist mit EncodeInterfaceData codiert und enthält Informationen über die Signaturen/Schnittstellen für die F # -Typen. FSharp.Core, FSharp.Compiler.Silverlight und FSharp.LanguageService.Compiler alle diese Informationen in einer externen Datei gespeichert und nicht im Ressourcenmanifest eingebettet.

Wie FSharp.Core nicht eine dieser in seiner Ressource Manifest enthalten sie Zeit haben äußerlich zu sein, Im obwohl dieser Grund nicht sicher.

Vom Benutzer erstellte F # -Dateien, die beim Kompilieren diese Informationen in das Ressourcenmanifest codieren, können Sie sehen, wenn Sie sich die Metadaten ansehen.

+2

Rechts. Mit anderen Worten, "SigData" und "OptData" werden immer in F # -Assemblys als verwaltete Ressourcen kompiliert, es sei denn, Sie geben ein Flag wie '--nooptimizationdata' an. Ich bin nicht sicher, warum, aber 'FSharp.Core' speichert diese Ressourcen in externe Dateien (' FSharp.Core.sigdata' und 'FSharp.Core.optdata'); Wenn Sie versuchen, ein F # -Projekt zu kompilieren, das auf eine andere F # -Aufbau (z. B. "FSharp.Core") verweist, benötigt der F # -Compiler diese Informationen - wenn es nicht als verwaltete Ressource in die referenzierte Assembly eingebettet ist, sucht es nach den externen Dateien. Wenn es nicht gefunden werden kann, schlägt die Kompilierung mit einem Fehler fehl. –

Verwandte Themen