トップ回答者
WebSharperが使用できない原因について

質問
-
この度、ログインとログアウトできるサイトを作成したいと思い
WebSharperをインストールしたのですが
いざ使おうとテンプレートをクリックすると
エラー:このテンプレートはコンポネートアセンブリ
'Nuget.VisualStudio.Interop,Version=1.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a'を読み込もうとしました。この問題に
関する詳細情報、およびこのテンプレートを有効にする方法については、
プロジェクトテンプレートのカスタマイズにあるドキュメントを参照してください。表示して、nugetが入っていなかったのでインストールしました。
一応、上記の問題が解決したようです。
また、テンプレートをクリックすると
要素<import>の"Project"属性の値""は無効です。パラメーター
"path"の長さを0にすることはできません。
C:Users\****\AppData\Local\Temp\otd32xvq.k1o\Temp\
HtmlApplication13.fsprojエラーが表示して使えなくなってしまいました。
何か諸対策する方法がわからないので解決する方法をご教授ください。
ちなみに開発環境はVisual Studio 2010 Ultimateです。
回答
-
プロジェクトテンプレートの展開時にエラーになると*.fsprojを含むプロジェクトファイル一式は生成されません。
#エディタで開いてくださいと言われても無いものは開けないですよね
まずC:\Users\ユーザー名\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\*\ProjectTemplates\WebSharperを開きます。(入れ方によって途中のパスは変わるようです)
Zipファイルがいくつかあるはずですが、それがプロジェクトテンプレートです。Zipファイル内から*.fsprojファイルを抽出します。
今回の質問であればHtmlApplication.zipを開いてHtmlApplication.fsprojを抽出してメモ帳などで開きます。<Import Project="$(FSharpTargetsPath)" />を探します。
これは$(FSharpTargetsPath)であらわされるパスにあるファイルをインポートするという事です。
$(FSharpTargetsPath)は前の行で、$(MSBuildExtensionsPath32)\略\Microsoft.FSharp.Targets
というように定義されていて、このファイルをインポートしています。
今回の問題はこのMicrosoft.FSharp.Targetsが見つからないので空白になってしまい、インポートに失敗していることが原因です。
<Choose> <When Condition="'$(VisualStudioVersion)' == '11.0'"> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </When> <Otherwise> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </Otherwise> </Choose> <Import Project="$(FSharpTargetsPath)" />
$(MSBuildExtensionPath32)はx86環境では大体C:\Program Files\MSBuildになります。
VS2010はVer10.0なので上のConditionに一致せず、下の"C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\FSharp\Microsoft.FSharp.Targets"を参照していることになります。
VS2010Proだけを入れた環境ではこのパスにはファイルがありませんでしたが、探すと"C:\Program Files\Microsoft F#\v4.0\Microsoft.FSharp.targets"があったので、
<Import Project="C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\FSharp\Microsoft.FSharp.Targets" />
のように直接指定するか、あるいは、
<!-- F# targets --> <Choose> <When Condition="'$(VisualStudioVersion)' == '10.0'"> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </When> (略) </Choose> <Import Project="$(FSharpTargetsPath)" />
と書き換えて、もとのZipファイルに書き戻しておきます。
これでVS2010を再起動すれば、とりあえずプロジェクトテンプレートを読み込むことができます。しかし、VS2013だと成功したのですが、VS2010ではFSharp.Core Versino4.3.?を参照しているようで参照エラーになっています。Net4.5以降をインストールするとか、nugetでFSharp.Coreを更新するとか必要がありそうです。参照エラーを解消してもビルドはエラーになりますが。
WebSharperは全く触ったこともないし、F#もほとんど使っていないので、ここから先のビルド方法などはわかりません。
http://www.websharper.com/docs/installをみるとNet4.5以降を要求しているっぽいので、そもそもVS2010ではビルドはできないような気も...
#最新のWebSharperではエラーになるだけで、昔はVS2010でもできたのかなぁ
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 いわさ Tak1waMVP, Moderator 2015年3月7日 12:39
- 回答としてマーク phy_6 2015年3月8日 1:26
すべての返信
-
参考にはならないと思いますが、VisualStudio2013 Community では問題ありませんでした。
さて、HtmlApplication13.fsprojの<Import>要素はどのようになっていますか。
ご参考までにVS2013Communityでは以下のようになっておりました。<Import Project="$(FSharpTargetsPath)" /> <Import Project="..\packages\WebSharper.3.0.36.119-alpha\build\WebSharper.targets" Condition="Exists('..\packages\WebSharper.3.0.36.119-alpha\build\WebSharper.targets')" />
-
プロジェクトテンプレートの展開時にエラーになると*.fsprojを含むプロジェクトファイル一式は生成されません。
#エディタで開いてくださいと言われても無いものは開けないですよね
まずC:\Users\ユーザー名\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\*\ProjectTemplates\WebSharperを開きます。(入れ方によって途中のパスは変わるようです)
Zipファイルがいくつかあるはずですが、それがプロジェクトテンプレートです。Zipファイル内から*.fsprojファイルを抽出します。
今回の質問であればHtmlApplication.zipを開いてHtmlApplication.fsprojを抽出してメモ帳などで開きます。<Import Project="$(FSharpTargetsPath)" />を探します。
これは$(FSharpTargetsPath)であらわされるパスにあるファイルをインポートするという事です。
$(FSharpTargetsPath)は前の行で、$(MSBuildExtensionsPath32)\略\Microsoft.FSharp.Targets
というように定義されていて、このファイルをインポートしています。
今回の問題はこのMicrosoft.FSharp.Targetsが見つからないので空白になってしまい、インポートに失敗していることが原因です。
<Choose> <When Condition="'$(VisualStudioVersion)' == '11.0'"> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </When> <Otherwise> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </Otherwise> </Choose> <Import Project="$(FSharpTargetsPath)" />
$(MSBuildExtensionPath32)はx86環境では大体C:\Program Files\MSBuildになります。
VS2010はVer10.0なので上のConditionに一致せず、下の"C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\FSharp\Microsoft.FSharp.Targets"を参照していることになります。
VS2010Proだけを入れた環境ではこのパスにはファイルがありませんでしたが、探すと"C:\Program Files\Microsoft F#\v4.0\Microsoft.FSharp.targets"があったので、
<Import Project="C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\FSharp\Microsoft.FSharp.Targets" />
のように直接指定するか、あるいは、
<!-- F# targets --> <Choose> <When Condition="'$(VisualStudioVersion)' == '10.0'"> <PropertyGroup Condition="Exists('$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets')"> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft F#\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </When> (略) </Choose> <Import Project="$(FSharpTargetsPath)" />
と書き換えて、もとのZipファイルに書き戻しておきます。
これでVS2010を再起動すれば、とりあえずプロジェクトテンプレートを読み込むことができます。しかし、VS2013だと成功したのですが、VS2010ではFSharp.Core Versino4.3.?を参照しているようで参照エラーになっています。Net4.5以降をインストールするとか、nugetでFSharp.Coreを更新するとか必要がありそうです。参照エラーを解消してもビルドはエラーになりますが。
WebSharperは全く触ったこともないし、F#もほとんど使っていないので、ここから先のビルド方法などはわかりません。
http://www.websharper.com/docs/installをみるとNet4.5以降を要求しているっぽいので、そもそもVS2010ではビルドはできないような気も...
#最新のWebSharperではエラーになるだけで、昔はVS2010でもできたのかなぁ
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 いわさ Tak1waMVP, Moderator 2015年3月7日 12:39
- 回答としてマーク phy_6 2015年3月8日 1:26
-
成る程、プロジェクトファイル自体が作成されないのですね…。
ご指摘ありがとうございます。では私は意味のわからないことを伝えてました、失礼しました。
- 編集済み いわさ Tak1waMVP, Moderator 2015年3月7日 13:00