Proyecto xbuild y F # (vs2010)
-
27-10-2019 - |
Pregunta
Tengo una solución de lenguaje mixto VS 2010 que es principalmente C #, pero contiene un servicio de Windows escrito en F #. Tuve este edificio con xbuild en un entorno paralelo, pero desde que actualicé a la versión empaquetada de mono 2.10.5 desde badgerports < / a> No pude hacerlo funcionar.
El error que normalmente encuentro es:
/home/alex/git/Solution/FSProject/FSProject.fsproj: error: el destino llamado 'Build' no se encuentra en el proyecto.
Lo que me desconcierta es que al mirar el archivo del proyecto, no parece que se hayan definido NINGÚN objetivo. Estoy lejos de ser un experto en MSBuild, pero esto me parece un poco extraño. Dicho esto, funcionó anteriormente.
¿Alguien se ha encontrado (y con suerte ha encontrado la solución) problemas similares? Si es posible, me gustaría poder construir la solución con xbuild y desde Visual Studio.
El entorno es mint 11 (no estoy seguro si está basado en ubuntu maverick o natty) ejecutando mono 2.10.5 desde badgerports. fsharp se instaló desde la última fuente con el prefijo predeterminado.
<×editar
He podido acercarme un poco más gracias al puntero de Brian (tuve que codificar una ruta, xbuild parece tener problemas para resolver cosas como "$ (MSBuildExtensionsPath32) .. \ FSharp \ 1.0 \ Microsoft. FSharp.Targets "). En realidad, se está llamando a FSC ahora, aunque se queja de que no puede resolver la referencia a FSharp.Core.
Encontré esta página F # y XBuild (Debian) < / a> útil para llegar tan lejos.
Solución
Ya no hay necesidad de piratería si usa esto:
- Mono 3.0.0 o más reciente.(Mi cambio se combinó aquí ).
- etiqueta FSharp 3.0.26 (o más reciente) en github (mi cambiose fusionó aquí ).
Otros consejos
Así que resultó que el entorno paralelo me estaba facilitando las cosas. Mono se instala en / usr, mientras que F # se instala en / usr / local, por lo que necesitaba configurar enlaces simbólicos para permitir que los objetivos FSharp y los objetivos comunes se vieran entre sí. Esto se detalla aquí: F # y XBuild (Debian)
Una vez que esto se configuró, todavía tenía problemas. Después de agregar algunos mensajes de depuración, descubrí que xbuild no resolvía la ruta a los objetivos de F # correctamente. El archivo del proyecto estaba intentando importar de esta manera:
<Import Project="$(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets" Condition="!Exists('$(MSBuildBinPath)\Microsoft.Build.Tasks.v4.0.dll')" />
<Import Project="$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets" Condition="Exists('$(MSBuildBinPath)\Microsoft.Build.Tasks.v4.0.dll')" />
y xbuild tenía problemas para resolver la ruta relativa. Así que lo cambié a esto:
<Import Project="$(TargetsPath)" Condition="$(TargetsPath) != ''" />
<Import Project="$(MSBuildExtensionsPath32)\FSharp\1.0\Microsoft.FSharp.Targets" Condition="$(TargetsPath) == '' And !Exists('$(MSBuildBinPath)\Microsoft.Build.Tasks.v4.0.dll')" />
<Import Project="$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets" Condition="$(TargetsPath) == '' And Exists('$(MSBuildBinPath)\Microsoft.Build.Tasks.v4.0.dll')" />
lo que me permite pasar la ruta a FSharp.targets en la línea de comando.
Todavía hay algunos problemas (está fallando con una queja sobre ItemGroups que no está registrado, sé que esto es una debilidad en xbuild pero parece ser una falsa alarma - el proyecto de hecho se construye y se ejecuta con éxito). Espero que esto ayude a alguien más.