能否在.NET Framework 4.8中引用4.0及以上版本的FSharp.Data?
问题根因
报错核心是F#类型提供器的设计时加载逻辑不会读取项目app.config内的绑定重定向规则,你配置的FSharp.Core 6.0重定向仅对程序运行时生效,编译阶段加载FSharp.Data.DesignTime时,系统仍会尝试匹配该程序集依赖的4.7.0.0版本FSharp.Core,进而触发加载失败。
解决方案
按以下步骤操作即可解决:
- 调整paket包引用规则,强制FSharp.Data使用适配.NET Framework的版本,而非netstandard2.0版本。在paket.dependencies文件中修改FSharp.Data的引用规则为:
修改完成后执行nuget FSharp.Data framework: net48paket install更新项目引用。 - 给F#编译器配置文件添加FSharp.Core绑定重定向:
找到本地使用的F#编译器对应配置文件,Visual Studio 2022默认路径为C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\fsc.exe.config,若使用独立F# SDK编译,路径一般为C:\Program Files (x86)\Microsoft SDKs\F#\<你的F#版本号>\Framework\v4.0\fsc.exe.config。在该配置文件的<runtime><assemblyBinding>节点下添加如下规则:<dependentAssembly> <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="6.0.0.0" /> </dependentAssembly> - 若你的项目为SDK风格的.NET Framework项目,可在fsproj的
<PropertyGroup>节点添加以下配置,进一步适配绑定重定向规则:<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> - 清除缓存重新编译:执行
paket clear-cache,删除项目的bin、obj文件夹,重启IDE后重新编译即可正常运行。
内容的提问来源于stack exchange,提问作者Hobitten
相关产品推荐
相关产品推荐

