F # Definieren / Verwenden eines Typs / Moduls in einer anderen Datei im selben Projekt


78

Dies wird hoffentlich einfach sein. Ich habe ein F # -Projekt (aktuelles F # CTP) mit zwei Dateien (Program.fs, Stack.fs). In Stack.fs habe ich einen einfachen Namespace und eine Typdefinition

Stack.fs

namespace Col

type Stack= 
 ...

Jetzt versuche ich, den Namespace durch Deklarieren in Program.fs aufzunehmen

open Col

Dies funktioniert nicht und gibt mir den Fehler "Der Namespace oder das Modul Col ist nicht definiert." Es ist jedoch innerhalb desselben Projekts definiert. Ich muss etwas Offensichtliches vermissen


3
Als Tipp: Wenn Sie die Reihenfolge der Dateien in Visual Studio ändern müssen, installieren Sie F # PowerTools und verschieben Sie sie Alt+Arrowim Lösungs-Explorer (oder klicken Sie mit der rechten Maustaste). Sie können sie auch in andere Ordner verschieben oder neue Ordner usw. erstellen.
Abel

Antworten:


84

In welcher Reihenfolge befinden sich die Dateien im Projekt? Stack.fs muss vor Program.fs stehen, damit Program.fs es sehen kann.

Siehe auch den Anfang von

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!444.entry

und das Ende von

http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!347.entry


1
Perfekt! Zusätzliche Zeichen, die zu den Einschränkungen für zufriedenstellende Kommentare hinzugefügt wurden.
JaredPar

1
Dieser hat mich auch erwischt, ich hätte gedacht, dass der F # -Compiler einfach alle anderen Dateien schnell überprüfen und nach den fehlenden Modulen suchen könnte ... scheint einfach zu sein
Ed Ayers

"In welcher Reihenfolge befinden sich die Dateien im Projekt?" was bedeutet das? Alle Dateien befinden sich im selben Ordner.
Runeks

Entscheidend ist die Reihenfolge, in der die Dateien in der .fsproj-Datei aufgeführt sind. Visual Studio Solution Explorer sollte sie in derselben Reihenfolge auflisten und Kontextmenübefehle bereitstellen, um sie nach oben oder unten zu verschieben.
Scott Hutchinson

42

Ich hatte die gleichen Probleme, und Sie haben Recht, die Reihenfolge der Dateien wird vom Compiler berücksichtigt. Anstelle des Musters Entfernen und Hinzufügen können Sie die Elemente Nach oben / Nach unten im Kontextmenü verwenden, das den .fs-Dateien zugeordnet ist. (Alt-Up und Alt-Down sind die Tastenkombinationen in den meisten Standard-Tastenkombinationen.)


Ich glaube, diese Tastenkombinationen sind nur mit installierten F # PowerTools verfügbar (aber die meisten F # -Benutzer installieren sie trotzdem).
Abel

13

Alle oben genannten Punkte sind korrekt, aber wie dies in VS2013 zu tun ist, ist eine andere Frage. Ich musste meine .fsproj- Datei manuell bearbeiten und die Dateien innerhalb eines ItemGroup-Knotens in exakter Reihenfolge festlegen. In diesem Fall würde es so aussehen:

<ItemGroup>
    <Compile Include="Stack.fs" />
    <Compile Include="Program.fs" />
    <None Include="App.config" />
</ItemGroup>

Oder Sie hätten einfach F # PowerTools installieren können , mit dem Sie eine Datei nach oben oder unten verschieben, in ein Verzeichnis oder aus diesem heraus verschieben können und vieles mehr. Spart Ihnen viel Zeit.
Abel

2
Hatte dies gerade in VS2015 stattgefunden - das Verschieben von Dateien nach oben oder unten konnte das Problem nicht beheben - musste die .fsproj-Datei manuell bearbeiten. - Möglicher Fehler in F # PowerTools
jps

1
@jps, ja, ich habe auch einige Fehler mit PowerTools bemerkt, insb. Wenn Sie Verzeichnisse nach oben / unten verschieben (sie landen in fsproj unten, erscheinen jedoch in VS höher). Das Verschieben innerhalb eines Verzeichnisses funktioniert normalerweise richtig (für mich). Zum Glück können Sie das fsproj jetzt direkt in VS2015 bearbeiten.
Abel

1

Ich hatte das gleiche Problem und es war in der Tat die Reihenfolge der Dateien. In den obigen Links wurde jedoch nicht beschrieben, wie das Problem in Visual Studio 2008 F # 1.9.4.19 behoben werden kann.

Wenn Sie ein Modul öffnen, stellen Sie sicher, dass Ihre Quelldatei nach der Abhängigkeit im Lösungs-Explorer kommt. Klicken Sie einfach mit der rechten Maustaste auf Ihre Quelle und wählen Sie Entfernen. Fügen Sie es dann erneut hinzu. Dadurch wird es am Ende der Liste angezeigt. Hoffentlich haben Sie keine zirkulären Abhängigkeiten.


1
Ich bin neu in F #. Was ist, wenn ich eine zirkuläre Abhängigkeit habe? Ist das überhaupt nicht möglich?
MEMark

1
@MEMark Verwenden Sie das Schlüsselwort "und", wenn Sie solche Typen wirklich benötigen.
Goswin

0

Ich verwende Visual Studio für Mac - 8.1.4 und habe festgestellt, dass einige .fs-Dateien nicht als "Kompilieren" markiert sind. Sie können dies sehen, indem Sie die Build-Ausgabe anzeigen und prüfen, ob alle Ihre Dateien vorhanden und in der richtigen Reihenfolge sind.

Ich musste manuell sicherstellen, dass bestimmte Dateien mit "Kompilieren" markiert sind, und sie manuell nach oben und unten verschieben, bis es "dauert".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.