私はVisual Studioを使用して生成されたいくつかのF#プロジェクトファイルを持っています。MSBuildプロジェクトで特定のバージョンのF#コンパイラを使用するにはどうすればよいですか?
いくつかのF#バージョンがインストールされているコンピュータには、最新のものが選択されているようです。
しかし、特定のF#コンパイラ(バージョン3.1.2を使用してインストールされたもの)を使用したいと思います。
どうすればよいですか?
私はVisual Studioを使用して生成されたいくつかのF#プロジェクトファイルを持っています。MSBuildプロジェクトで特定のバージョンのF#コンパイラを使用するにはどうすればよいですか?
いくつかのF#バージョンがインストールされているコンピュータには、最新のものが選択されているようです。
しかし、特定のF#コンパイラ(バージョン3.1.2を使用してインストールされたもの)を使用したいと思います。
どうすればよいですか?
同様の設定を使用していますが、私は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
を参照するのに非常に役立ちます。これはランタイムエラーの原因となります。各.csproj
にFSharp.Core.dll
を参照するだけの小道具ファイルを含めると、 `.props 'ファイルを更新するだけで、すべてのC#プロジェクトをコアライブラリの新しいバージョンに切り替えることができます。
これはすごくうまく動作し、完璧です。ありがとう。 – Arafangion