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

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

4 голосов
/ 20 октября 2011

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

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

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

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

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

Средой является mint 11 (не уверен, основан ли он на ubuntu maverick или natty), на котором запущен mono 2.10.5 из badgerports. fsharp был установлен из последнего источника с префиксом по умолчанию.

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

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

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

Ответы [ 2 ]

6 голосов
/ 17 сентября 2012

Хакерство больше не нужно, если вы используете это:

3 голосов
/ 25 октября 2011

Так что получается, что параллельная среда действительно облегчила мне жизнь.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, но это ложная тревога - проект действительно создается и успешно запускается).Надеюсь, это поможет кому-то еще.

...