我有一些使用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