Проект xbuild и F# (vs2010)

У меня есть решение для смешанного языка VS 2010, которое в первую очередь C#, но содержит службу Windows, написанную на F#. У меня было это здание с xbuild в параллельной среде, но после обновления до упакованной версии mono 2.10.5 от http://badgerports.org/ я не смог заставить его работать.

Ошибка, с которой я обычно сталкиваюсь:

/home/alex/git/Solution/FSProject/FSProject.fsproj: ошибка: цель с именем "Build" не найдена в проекте.

Что меня озадачивает, так это то, что, глядя на файл проекта, кажется, что ЛЮБЫЕ цели не определены. Я далеко не специалист по MSBuild, но мне это кажется немного странным. Это сказанное, это действительно работало ранее.

Кто-нибудь сталкивался (и, надеюсь, нашел решение) с похожими проблемами? Если возможно, я бы хотел иметь возможность построить решение с помощью xbuild и Visual Studio.

Окружение - mint 11 (не уверен, основано ли это на Ubuntu Maverick или Natty), на котором запущен моно 2.10.5 из badgerports. fsharp был установлен из последнего источника с префиксом по умолчанию.

редактировать

Я смог немного приблизиться благодаря указателю Брайана (мне пришлось жестко кодировать путь, похоже, у xbuild возникли проблемы с разрешением таких вещей, как "$(MSBuildExtensionsPath32)..\FSharp\1.0\Microsoft.FSharp.Targets"). FSC фактически вызывается сейчас, хотя он жалуется, что не может разрешить ссылку на FSharp.Core.

Я нашел эту страницу F# и XBuild (Debian) полезной в этом деле.

2 ответа

Решение

Больше нет необходимости в хакерстве, если вы используете это:

Вот и получается, что параллельная среда действительно облегчила мне жизнь. Mono устанавливается в / usr, в то время как F# устанавливается в /usr/local, поэтому мне нужно было установить символические ссылки, чтобы позволить целям FSharp и общим целям видеть друг друга. Это подробно описано здесь: F# и XBuild (Debian)

Как только это было установлено, у меня все еще были проблемы. После добавления некоторых отладочных сообщений я обнаружил, что xbuild неправильно разрешает путь к целям F#. Файл проекта пытался импортировать так:

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

и у xbuild возникли проблемы с разрешением относительного пути. Так что я просто изменил это на:

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

что позволяет мне передать путь к FSharp.targets в командной строке.

Есть еще несколько проблем (это терпит неудачу с жалобой на то, что ItemGroups не зарегистрированы, я знаю, что это слабое место в xbuild, но, похоже, это ложная тревога - проект действительно создается и запускается успешно). Надеюсь, это поможет кому-то еще.

Другие вопросы по тегам