Pergunta

Eu tenho uma solução de idioma misto VS 2010 é principalmente C #, mas contém um serviço do Windows escrito em F #. Eu tive esse edifício com xbuild no em um ambiente paralelo, mas desde a atualização para a versão embalada de mono 2.10.5 de badgerports eu fui incapaz de fazê-lo funcionar.

O erro que eu normalmente encontro é:

/home/alex/git/Solution/FSProject/FSProject.fsproj: erro:. Alvo chamado 'Construir' não foi encontrado no projeto

O que me intriga é que olhando para o arquivo de projeto, não parece que as metas são definidas. Estou longe de ser um especialista em MSBuild, mas isso parece um pouco estranho para mim. Dito isto, ele fez um trabalho anteriormente.

Tem alguém correr para (e esperemos que encontrou a solução para) problemas semelhantes? Se possível, eu gostaria de ser capaz de construir a solução com xbuild e do Visual Studio.

Ambiente é de menta 11 (não sei se isso é baseado no Ubuntu maverick ou natty) rodando mono 2.10.5 do badgerports. FSharp foi instalado a partir de fonte mais recente para o prefixo padrão.

Editar

Eu tenho sido capaz de obter um agradecimento pouco mais perto de ponteiro de Brian (I teve de codificar um caminho, xbuild parece ter problemas para resolver coisas como "$ (MSBuildExtensionsPath32) .. \ FSharp \ 1.0 \ Microsoft. FSharp.Targets "). FSC está realmente sendo chamado agora, embora ele está reclamando que é incapaz de resolver a referência para FSharp.Core.

Eu encontrei esta página F # e XBuild (Debian) útil para chegar até aqui.

Foi útil?

Solução

Não há nenhuma necessidade de hackery mais se você usar este:

Outras dicas

Assim, verifica-se que o ambiente paralelo foi realmente fazendo as coisas mais fáceis para mim. Mono instala em / usr, enquanto F # instala em / usr / local, então eu precisava de criar links simbólicos para permitir alvos FSharp e metas comuns para ver uns aos outros. Esta é detalhado aqui: F # e XBuild (Debian)

Uma vez que esta foi criada, eu ainda estava tendo problemas. Depois de adicionar algumas mensagens de depuração descobri que xbuild não estava resolvendo o caminho para alvos F # corretamente. arquivo de projeto foi tentando importar como isto:

  <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')" />

e xbuild foi problemas ao tentar resolver o caminho relativo. Então, eu só mudou a esta:

  <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')" />

que me permite passin o caminho para FSharp.targets na linha de comando.

Existem ainda alguns problemas (que está falhando com uma reclamação sobre ItemGroups não sendo registradas, eu sei que isso é uma fraqueza na xbuild mas parece ser um falso alarme - o projeto que na verdade se construiu e executar com êxito). Espero que isso ajude alguém.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top