我有一些使用visual studio生成的F#项目文件。如何在MSBuild项目中使用特定版本的F#编译器?
在我的电脑上安装了几个F#版本,它似乎选择了最新的一个。
但是,我想使用特定的F#编译器 - 使用版本3.1.2安装的编译器。
我该怎么做?
我有一些使用visual studio生成的F#项目文件。如何在MSBuild项目中使用特定版本的F#编译器?
在我的电脑上安装了几个F#版本,它似乎选择了最新的一个。
但是,我想使用特定的F#编译器 - 使用版本3.1.2安装的编译器。
我该怎么做?
我使用的是类似的设置,只是我消耗来自其nuget package F#编译器 - 这部作品在共享构建环境更好。
您需要一个.props
文件才能包含在您的所有F#项目中,我称之为fsharp_project.props
。通过更改该道具文件,您可以更新所有F#项目的编译器版本。其内容应如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PackageRoot>C:\packages\Fsharp.Compiler.Tools.Nuget</PackageRoot>
<FscToolPath>$(PackageRoot)\tools</FscToolPath>
<FSharpVersion>v3.0</FSharpVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>$(PackageRoot)\tools\fsharp.core.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
您需要调整到本地版本的F#编译器以及您希望使用的核心库的路径。
然后修改.fsproj
文件,以消耗该文件如下:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="C:\whereever\fsharp_project.props"/>
...
在.fsproj
文件再往下,你会看到FSharp.Core.dll
参考。删除 - 在props文件中,已经有对编译器附带的核心库版本的引用。
重新装载该项目,并重新构建,它会打印出它使用fsc.exe
的完整路径。
附注:与.props
文件相同的技巧对于引用F#代码的C#使用者中的FSharp.Core.dll
的正确版本也非常有帮助 - 这是运行时错误的常见来源。包括道具文件,只有在各.csproj
引用FSharp.Core.dll
,你将能够只更新`.props'文件的内容全部C#项目切换到核心库的新版本。
这很有效,非常完美。谢谢。 – Arafangion