4

主にC#であるVS 2010混合言語ソリューションがありますが、F#で記述されたWindowsサービスが含まれています。並列環境でxbuildを使用してこのビルドを実行しましたが、badgerportsからmono 2.10.5のパッケージバージョンにアップグレードしてから、動作させることができませんでした。

私が通常遭遇するエラーは次のとおりです。

/home/alex/git/Solution/FSProject/FSProject.fsproj:エラー:「Build」という名前のターゲットがプロジェクトに見つかりません。

私が困惑しているのは、プロジェクトファイルを見ると、ターゲットが定義されていないように見えることです。私はMSBuildの専門家からはほど遠いですが、これは私には少し奇妙に思えます。そうは言っても、以前は機能していました。

誰かが同様の問題に遭遇した(そしてうまくいけば解決策を見つけた)ことがありますか?可能であれば、xbuildを使用してVisualStudioからソリューションをビルドできるようにしたいと思います。

環境はミント11(これがubuntu maverickまたはnattyに基づいているかどうかはわかりません)で、badgerportsからmono2.10.5を実行しています。fsharpは、最新のソースからデフォルトのプレフィックスにインストールされました。

編集

ブライアンのポインターのおかげで少し近づくことができました(パスをハードコーディングする必要がありました。xbuildは "$(MSBuildExtensionsPath32).. \ FSharp \ 1.0\Microsoft.FSharp.Targetsのようなものを解決するのに問題があるようです。 ")。FSCは実際に呼び出されていますが、FSharp.Coreへの参照を解決できないと不平を言っています。

このページのF#とXBuild(Debian)は、これを達成するのに役立ちました。

4

2 に答える 2

6

これを使用すれば、ハッカーはもう必要ありません。

于 2012-09-17T13:07:29.333 に答える
3

つまり、並列環境のおかげで実際に作業が楽になったのです。Mono は /usr にインストールされ、F# は /usr/local にインストールされるため、FSharp ターゲットと Common ターゲットが相互に認識できるようにシンボリック リンクを設定する必要がありました。詳細はこちら: 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 の弱点であることはわかっていますが、誤報のようです。実際、プロジェクトは正常にビルドされ、実行されます)。これが他の誰かに役立つことを願っています。

于 2011-10-24T22:53:03.857 に答える