2017-05-08 22 views
6

私はVisual Studioを使用して生成されたいくつかのF#プロジェクトファイルを持っています。MSBuildプロジェクトで特定のバージョンのF#コンパイラを使用するにはどうすればよいですか?

いくつかのF#バージョンがインストールされているコンピュータには、最新のものが選択されているようです。

しかし、特定のF#コンパイラ(バージョン3.1.2を使用してインストールされたもの)を使用したいと思います。

どうすればよいですか?

答えて

4

同様の設定を使用していますが、私はF#コンパイラをそのnuget packageから消費しています。これは共有ビルド環境でよりうまく動作します。

すべてのF#プロジェクトに.propsファイルが含まれている必要があります。これはfsharp_project.propsと呼ばれています。その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"/> 
... 

をあなたはFSharp.Core.dllの参照が表示されます。

すると、次のようにそのファイルを消費するためにあなたの.fsprojファイルを変更します。それを削除する - propsファイルには、すでにコンパイラに付属しているコアライブラリのバージョンへの参照があります。

プロジェクトを再ロードして再ビルドすると、使用しているfsc.exeのフルパスがプリントアウトされます。

.propsファイルの同じトリックは、F#コードのC#コンシューマで正しいバージョンのFSharp.Core.dllを参照するのに非常に役立ちます。これはランタイムエラーの原因となります。各.csprojFSharp.Core.dllを参照するだけの小道具ファイルを含めると、 `.props 'ファイルを更新するだけで、すべてのC#プロジェクトをコアライブラリの新しいバージョンに切り替えることができます。

+1

これはすごくうまく動作し、完璧です。ありがとう。 – Arafangion

関連する問題