2008-10-06 11 views
57

Es de esperar que sea fácil. Tengo un proyecto F # (último F # CTP) con dos archivos (Program.fs, Stack.fs). En Stack.fs tengo un espacio de nombres simples y definición de tipoF # definición/uso de un tipo/módulo en otro archivo en el mismo proyecto

Stack.fs

namespace Col 

type Stack= 
... 

Ahora trato de incluir el espacio de nombres en Program.fs declarando

open Col 

Esto no lo hace trabajo y me da el error "El espacio de nombres o el módulo Col no está definido". Sin embargo, está definido dentro del mismo proyecto. Me falta algo obvio

+2

Como consejo: si usted necesita cambiar el orden de los archivos en Visual Studio, instalar [F # Herramientas] (https://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff), y use 'Alt + flecha' en el explorador de soluciones para moverlos (o haga clic con el botón derecho). También puede moverlos a otras carpetas o crear nuevas carpetas, etc. – Abel

Respuesta

68

¿Qué orden tienen los archivos en el proyecto? Stack.fs debe venir antes que Program.fs para Program.fs para poder 'verlo'.

Véase también el comienzo de

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

y el final de

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

+1

¡Perfecto! Se agregaron caracteres adicionales a las restricciones de comentarios satifsy. – JaredPar

+1

Este me sorprendió también, hubiera pensado que el compilador F # podría simplemente tener una comprobación rápida en todos los otros archivos y buscar los módulos faltantes ... parece lo suficientemente simple –

1

que tenía el mismo problema y fue de hecho el orden de los archivos. Sin embargo, los enlaces anteriores no describen cómo solucionarlo en Visual Studio 2008 F # 1.9.4.19.

Si abre un módulo, asegúrese de que su archivo de origen sea después de la dependencia en el explorador de soluciones. Simplemente haga clic con el botón derecho en su fuente y seleccione Eliminar. Luego vuelve a agregarlo. Esto lo hará aparecer en la parte inferior de la lista. Esperemos que no tenga dependencias circulares.

+0

Soy nuevo en F #. ¿Qué pasa si tengo una dependencia circular? ¿Esto no es posible en absoluto? – MEMark

+1

@MEMark use la palabra clave "y" cuando realmente necesite dichos tipos. – Goswin

38

Tuve los mismos problemas, y tiene razón, el orden de los archivos es tomado en cuenta por el compilador. En lugar del patrón Eliminar y Agregar, puede usar los elementos Subir/Bajar en el menú contextual asociado a los archivos .fs. (Alt-Up y Alt-Down son las teclas de método abreviado en la mayoría de las combinaciones de teclas estándar)

+0

Creo que estas asociaciones de teclas solo están disponibles con F # PowerTools instaladas (pero la mayoría de los usuarios de F # las instalan de todos modos). – Abel

5

Todo lo anterior es correcto, pero cómo hacerlo en VS2013 es otra cuestión. Tuve que editar mi archivo .fsproj en Notepad ++ y establecer el orden de un nodo ItemGroup. En este caso, se vería así:

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

O simplemente podría haber instalado [F # PowerTools] (https://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff), lo que le permite mover un archivo hacia arriba o hacia abajo, moverlos a un directorio, o fuera de él, y mucho más. Le ahorrará mucho tiempo. – Abel

+1

Acabo de ocurrir esto en VS2015 - mover archivos hacia arriba o hacia abajo no solucionaba el problema - tuve que editar el archivo .fsproj manualmente. - Posible error en F # PowerTools – jps

+1

@jps, sí, noté algunos errores con PowerTools también, esp. al mover directorios arriba/abajo (terminan en la parte inferior en fsproj, pero aparecen más arriba en VS). Moverse dentro de un directorio por lo general va bien (para mí). Afortunadamente, ahora puede editar el fsproj directamente en VS2015. – Abel

Cuestiones relacionadas