在Heroku上构建VS2013 F#项目失败并显示“必需属性”项目“在导入中为空”

时间:2014-02-24 21:05:23

标签: heroku f# mono

我使用VS2013中的一个Nancy模板创建了一个F#项目。 代码基本上就是模板创建的内容。

我可以将创建的.sln文件导入Xamarin工作室,所有构建和运行都没有任何错误或问题。

当我尝试将项目推送到Heroku时,我收到错误:

/tmp/build_b3e2706f-20c8-421e-a1ce-781831880466/NancyFirstProject/NancyFirstProject.fsproj: error : /tmp/build_b3e2706f-20c8-421e-a1ce-781831880466/NancyFirstProject/NancyFirstProject.fsproj: The required attribute "Project" in Import is empty

我在Heroku上设置了buildpack,如下所示:

heroku config:set BUILDPACK_URL=https://github.com/aktowns/mono3-buildpack.git

我已经读过,如果您通过VS2013升级项目,可能会发生类似的错误。

这和我得到的错误一样吗? 我可以用另一个buildpack来解决这个问题吗?

我想我可以在Xamarin中创建解决方案,但如果可能,我想坚持使用vs2013。

编辑:**

在.fsproj文件中注意到这一点:

  <Choose>
    <When Condition="'$(VisualStudioVersion)' == '11.0'">
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </When>
    <Otherwise>
      <PropertyGroup>
        <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
      </PropertyGroup>
    </Otherwise>
  </Choose>
  <Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" />

2 个答案:

答案 0 :(得分:5)

我不完全确定为什么这不起作用,但是我必须摆脱F#项目文件中的<Choose>标记,以便让F#Formatting项目在Travis上工作(使用Mono构建)以及我必须做的改变looks like this (GitHub diff)。很抱歉缺乏明确性 - 我可能会从其他项目中复制此内容。

diff将<Choose>标记替换为:

<PropertyGroup>
  <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'">
   <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>

答案 1 :(得分:0)

现在可以使用here中的buildpack并指定更高版本的.net框架来解决此问题。