You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6项目使用FSharp.Configuration的ResXProvider调用资源报FS3033错误

报错原因

这个错误是FSharp.Configuration旧版本的ResXProvider与.NET 6+的程序集加载API不兼容导致的,类型提供者内部调用的.NET Framework时代的资源读取方法在.NET 6中已被移除或签名变更。

解决方案

按以下步骤依次排查即可解决:

  • 升级FSharp.Configuration依赖到2.0.0及以上的稳定版本,低于该版本的包未适配.NET 6的运行时环境
  • 在项目的.fsproj文件中添加以下属性组配置,修正类型提供者和资源生成的兼容逻辑:
<PropertyGroup>
  <!-- 关闭类型提供者的程序集影子拷贝,避免运行时找不到加载的资源程序集 -->
  <FSharpTypeProviderDisableShadowCopy>true</FSharpTypeProviderDisableShadowCopy>
  <!-- 用.NET Core+兼容的方式序列化资源文件 -->
  <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>
</PropertyGroup>
  • 确认resx文件的配置正确,设置为嵌入资源且随项目输出:
<EmbeddedResource Include="Resources/Strings.resx">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
  • 调整资源调用方式,ResXProvider生成的类型需要实例化后访问成员,不可直接用静态类访问:
open FSharp.Configuration
type ResourceProvider = ResXProvider<file="Resources/Strings.resx">

// 正确调用方式
let resources = ResourceProvider()
let greeting = resources.Greeting
备选方案

如果你只需要强类型访问resx资源,不需要用到FSharp.Configuration的其他功能,可以直接移除该依赖,.NET 6原生支持resx强类型生成:只需将resx文件设置为EmbeddedResource,MSBuild会在编译时自动生成对应的强类型访问类,无需额外配置。

内容的提问来源于stack exchange,提问作者CaptnCodr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:08