F#のportable class libraryがうまく8.1用に変わらなかったのでやったことメモ書き
昔に8.0用に書いたF#のportable class libraryがなにかうまく8.1用にプロジェクト変換?されないような感じでターゲットバージョンとF#ランタイムの関係がおかしい。
プロジェクトのプロパティ見ると
TargetFramework=.NET Portable Subset(.NET Framework 4.5,Silverlight 5,Windows Store apps(Windows 8))
Target F# runtime=F# 3.1 (FSharp.Core,2.3.5.1)
となってて両方ともほかに選択肢がない。
http://msdn.microsoft.com/en-us/library/ee353567.aspx
をみると2.3.5.1はWindows Store apps, .NET Framework 4, Silverlight 5用らしくTargetFrameworkが4.5といってるのと微妙に合わない。これはTargetFrameworkの表記ミス?
手動でそれっぽいとこいじったけれどコンパイルエラーになったので新しく同じようなプロジェクトを作って比較してみた。
関連してそうなところは以下
元
<PropertyGroup> … <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkProfile>Profile47</TargetFrameworkProfile> <TargetFSharpCoreVersion>2.3.5.1</TargetFSharpCoreVersion> … </PropertyGroup> … <ItemGroup> <Reference Include="FSharp.Core"> <HintPath>$(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETPortable\$(TargetFSharpCoreVersion)\FSharp.Core.dll</HintPath> <Private>True</Private> </Reference> </ItemGroup> … <Choose> <When Condition="'$(VisualStudioVersion)' == '11.0'"> <PropertyGroup> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.Portable.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </When> <Otherwise> <PropertyGroup> <FSharpTargetsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.Portable.FSharp.Targets</FSharpTargetsPath> </PropertyGroup> </Otherwise> </Choose> <Import Project="$(FSharpTargetsPath)" Condition="Exists('$(FSharpTargetsPath)')" /> … <PropertyGroup> <MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">11</MinimumVisualStudioVersion> </PropertyGroup>
新
<PropertyGroup> … <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> <TargetFrameworkProfile>Profile7</TargetFrameworkProfile> <TargetProfile>netcore</TargetProfile> <TargetFSharpCoreVersion>3.3.1.0</TargetFSharpCoreVersion> … </PropertyGroup> … <ItemGroup> <Reference Include="FSharp.Core"> <Name>FSharp.Core</Name> <AssemblyName>FSharp.Core.dll</AssemblyName> <HintPath>$(MSBuildExtensionsPath32)\..\Reference Assemblies\Microsoft\FSharp\.NETCore\$(TargetFSharpCoreVersion)\FSharp.Core.dll</HintPath> </Reference> </ItemGroup> … <Import Project="$(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.1\Framework\v4.0\Microsoft.Portable.FSharp.Targets" /> <PropertyGroup> <MinimumVisualStudioVersion Condition="'$(MinimumVisualStudioVersion)' == ''">12</MinimumVisualStudioVersion> </PropertyGroup>
上の方は合わせるとしてImportのところは元のだとVS2013とかで開いたときに古いのを指す?そもそもこれが何を指してるかわからんですが。
とりあえず別の古いプロジェクトをこれを参考にしてもろもろ書き替えたら最初手動で書き変えた時みたいなコンパイルエラーは出ず。
プロジェクトのプロパティをみると
TargetFramework=.NET Portable Subset(.NET Framework 4.5,Windows Store apps(Windows 8))
Target F# runtime=F# 3.1 (FSharp.Core,3.3.1.0)
とそれっぽくなってるっぽい。
これでプロジェクト作り直ししないでしのげるかしら…
なんかこの辺の変換がおかしい?のとかもF#が心なしかないがしろにされてるが故なのかは定かではないです(´・ω・`)