none
WebSharperが使用できない原因について RRS feed

  • 質問

  • この度、ログインとログアウトできるサイトを作成したいと思い

    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です。

    2015年3月7日 3:35

回答

  • プロジェクトテンプレートの展開時にエラーになると*.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!)

    2015年3月7日 12:11

すべての返信

  • こんにちは。

    何も調べてはいませんがとりあえず、

    C:Users\****\AppData\Local\Temp\otd32xvq.k1o\Temp\

    「C:Users」は誤字ですか?

    2015年3月7日 5:38
    モデレータ
  • 誤字です。

    正しくは次の通りです。

    C:\Users\****\AppData\Local\Temp\otd32xvq.k1o\Temp\

    2015年3月7日 6:05
  • 参考にはならないと思いますが、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')" />

    2015年3月7日 6:22
    モデレータ
  • WebSharper3.0.36.119-alphaをどのようにしてインストールしたのですか?

    VSEx2013for Windows Desktopをインストールしました。

    Nugetでコマンドを使って入れるんですかね?

    詳細な方法教えてください。お願いします。



    • 編集済み phy_6 2015年3月7日 7:32 誤字脱字
    2015年3月7日 6:33
  • importの要素を見ることはできませんでした。

    Appdata内のフォルダを覗いたのですがそれらしいファイルは一つも作られていませんでした。


    • 編集済み phy_6 2015年3月7日 7:25
    2015年3月7日 6:35
  • http://websharper.com 上記リンクからダウンロードしてインストールしただけです。 CommunityなのでNuGetは個別でインストールしていません。 本題とは異なるので調べてみて、別途不明点を質問してください。 HtmlApplication13.fsproをエディタで開いてImport要素を探してみてください。
    • 回答としてマーク phy_6 2015年3月7日 8:28
    • 回答としてマークされていない phy_6 2015年3月8日 1:26
    2015年3月7日 7:34
    モデレータ
  • HtmlApplication13.fsprojはvisualstudioで確認したところ、作成されていませんでした。ご協力いただきありがとうございました。

    2015年3月7日 8:27
  • F#でHtmlApplicationを選択した場合に作成されていると思います。

    VisualStudioで確認するのではなくWindowsエクスプローラからHtmlApplication13.fsprojのファイルをテキストエディタで開いてみてください。

    2015年3月7日 9:32
    モデレータ
  • プロジェクトテンプレートの展開時にエラーになると*.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!)

    2015年3月7日 12:11
  • 成る程、プロジェクトファイル自体が作成されないのですね…。
    ご指摘ありがとうございます。

    では私は意味のわからないことを伝えてました、失礼しました。

    2015年3月7日 12:41
    モデレータ