paket.referenceで複数のバージョン依存を設定する方法
.NET Core SDKというかnew fsprojになってから、以下のような依存関係を書く機会によく遭遇する。
<ItemGroup Condition="'$(TargetFramework)'=='net45'"> <PackageReference Include="FSharp.Core" Version="3.1.2.5" /> </ItemGroup> <ItemGroup Condition="'$(TargetFramework)'=='netstandard1.6'"> <PackageReference Include="FSharp.Core" Version="4.1.18" /> </ItemGroup>
古い環境ではなるべく最低ラインのバージョンを指定しつつ、netstandardでは比較的新しめのバージョンを指定するというもの。 ただこの書き方は現時点のVS2017だとちゃんと認識されないので困った。
というわけでこれと同等の書き方をPaketで再現させる。
まずはpaket.dependencies
を用意。
framework: netstandard1.6 source https://api.nuget.org/v3/index.json nuget FSharp.Core >= 4.1.18 lowest_matching:true group Legacy framework: net45 source https://api.nuget.org/v3/index.json nuget FSharp.Core >= 3.1.2.5 lowest_matching:true
framework targetごとにグループをわけておく。 これで異なるバージョンの、最も小さいバージョンが指定できる。
paket.reference
側では次のように記述する。
FSharp.Core group Legacy FSharp.Core
二つのグループについて依存関係を追加している。 これで、frameworkごとに異なるバージョンを指定できる。 この方法だとVS2017も正しく依存関係を認識する。
ちなみにpaket.template
では、以下のようにLOCKEDVERSION-グループ名
で記述する。
dependencies framework: net45 FSharp.Core >= LOCKEDVERSION-Legacy framework: netstandard1.6 FSharp.Core >= LOCKEDVERSION