2017-05-08 38 views

Odpowiedz

4

Używam podobnej konfiguracji, tylko że zajmuję kompilator F # z jego nuget package - działa lepiej w współdzielonych środowiskach kompilacji.

Będziesz potrzebował pliku .props, który będzie zawarty we wszystkich twoich projektach F #, nazwałem go fsharp_project.props. Zmieniając ten plik rekwizytów, możesz zaktualizować wersję kompilatora dla wszystkich swoich projektów F #. Jego zawartość powinna być następująca:

<?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> 

Musisz ustawić ścieżkę do lokalnego wersji F # kompilatora, a także do bibliotek głównych, które chcesz użyć.

Następnie zmodyfikować plik .fsproj spożywać ten plik w następujący sposób:

<?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"/> 
... 

Dalej w pliku .fsproj widać odniesienie FSharp.Core.dll. Usuń to - w pliku rekwizytów istnieje już odniesienie do wersji rdzeniowych bibliotek dołączonych do kompilatora.

Załaduj ponownie projekt i przeprowadź jego kompilację, a następnie wydrukuje pełną ścieżkę używanego obiektu fsc.exe.

Na marginesie: ta sama sztuczka z plikami .props jest również niezwykle pomocna przy wskazywaniu właściwej wersji FSharp.Core.dll w kliencie C# kodu F # - jest to częste źródło błędów środowiska wykonawczego. Dołącz plik rekwizytów, który odwołuje się tylko do FSharp.Core.dll w każdym , a będziesz mógł przełączać wszystkie projekty C# do nowej wersji bibliotek rdzenia, jedynie aktualizując plik `.props '.

+1

To działa fantastycznie i jest idealne. Dzięki. – Arafangion