我正在尝试使用包含 MSBuild 工具的 FAKE 构建工具构建简单的 F# 控制台程序,但我得到了以下信息:
FSProject.fsproj:错误:在项目中找不到名为“Build”的目标。
我该如何解决这个问题?
我正在使用 VS2013 和 .NET 4.5
问题是由于我使用的 FAKE 构建工具使用来自c:\Windows\Microsoft.NET\Framework\v4.0.30319
. 但是 VS2013 F# 项目只能在[ProgramFilesX86]\MSBuild\12.0\bin
.
那么,如何在 FAKE 工具中解决这个问题:
您应该根据此更改 FAKE.exe.config
即将设置更改MSBuildPath
为实际路径。
要找到问题,您可以先为 fsproj 文件创建自己的 Build-target:
<Target Name="Build">
<Message Text="Ext = $(MSBuildExtensionsPath)" />
<Message Text="Tools = $(MSBuildToolsVersion)" />
<Message Text="msb32 = $(MSBuildExtensionsPath32)" />
<Message Text="targ = $(TargetFrameworkIdentifier)" />
<Message Text="fs = $(FSharpTargetsPath)" />
<Message Text="vs = $(VisualStudioVersion)" />
</Target>
问题可能是有一个条件说类似
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0'">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
但是对于最近的 Visual Studio,条件不满足,或者路径实际上在其他地方,比如 inVisualStudio\v$(MSBuildToolsVersion)\FSharp\
而不是 in,VisualStudio\v$(VisualStudioVersion)\FSharp\
因此作为快速修复,您可以将其回退到其他地方,例如
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>
<PropertyGroup Condition="'$(VisualStudioVersion)' != '11.0' And Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\')">
<FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\FSharp\Microsoft.FSharp.Targets</FSharpTargetsPath>
</PropertyGroup>