2017-05-08 41 views

回答

4

我使用的是類似的設置,只是我消耗來自其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#項目切換到核心庫的新版本。

+1

這很有效,非常完美。謝謝。 – Arafangion

相關問題