【问题标题】:Strong-Named resources in F#F# 中的强命名资源
【发布时间】:2017-01-12 18:36:10
【问题描述】:

按照this SO post中提供的步骤,我已经成功添加了一个资源文件,可以查询我已经包含的资源,但是我必须手动使用ResourceManager类来获取嵌入的资源——比如

let someText = ResourceManager("strings", System.Reflection.Assembly.GetCallingAssembly()).GetObject("SomeText")

在 VB.NET 和 C# 中,这些资源是强命名的。因此,如果我有一个名为“SomeText.txt”的资源文件,我可以在代码中调用它

var someText = MyDefaultNamespace.Properties.Resources.SomeText;

有没有办法让 F# 资源强命名,就像它们在 C# 和 VB.NET 中一样,在 F# 中?可能是 t4 文本模板?

【问题讨论】:

  • 在您的 C#(或 VB)项目中,右键单击 SomeText 并单击“转到定义”。看看它是怎么做的?
  • +1。这将我带到 Resources.Designer.cs 文件(其属性包括自定义工具ResXFileCodeGenerator),它似乎将所有资源都包含为具有 get 访问器的自己的静态属性。在 F# 中,我的 Resources.resx 没有 Designer.fs 文件,并且 Resources.resx 文件没有“自定义工具”选项。想法?
  • 想法:手动编写Resources.designer.fs文件。
  • 谢谢@CaringDev,这似乎是我正在寻找的东西,但它提出了一个全新的问题 - 如果文件位于输出目录中,它似乎只适用于资源文件。我正在查看源代码,看看它是否可以在运行时提取作为我的程序集的嵌入式资源的 resx 文件。关于 ResXProvider 的讨论并不多

标签: f# resx


【解决方案1】:

虽然这绝对是一种解决方法,但可以将资源移动到 C# 或 VB.NET 项目中,并将生成的资源类型的访问修饰符更改为 public,以便您可以从 F# 以 described here 访问它们。简而言之:

  • 创建 C# 项目并添加资源 (RESX) 文件
  • 将自定义工具从ResXFileCodeGenerator更改为PublicResXFileCodeGenerator
  • 或者:将访问修饰符更改为Public:

【讨论】:

    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多