F# 项目中的工具不是很好,所以我在之前的答案中建议的内容将不起作用。
在 C# 项目中,有一个名为“ResXFileCodeGenerator”的自定义工具在 .resx 文件上运行(就在构建之前)并生成 C# 包装类。这显然在 F# 项目中不可用。你必须解决方法。
我想到的最简单的方法——也就是说,如果你想使用从 C# 自定义工具生成的强类型包装器——是将新的 C# 类库添加到你的解决方案中,它将包含 resx 文件并将生成包装器类. 您可以将 .resx 文件从Project -> Add New Item... -> Resource File
. 然后,您可以从所有 F# 项目中引用此库并使用生成的包装器类:
open ClassLibrary1; // this is the C# library
...
let x = Resources.String1;
第二种方法是将 .resx 文件直接添加到 F# 项目中。有趣的是,Visual Studio 不允许您“添加新项目”类型为 Resource。您可以通过在另一个临时项目(例如类型 C# 类库)中创建资源文件来解决此问题,然后使用该Project -> Add Existing Item
命令将生成的 .resx 文件添加到您的 F# 项目中。然后,您可以使用ResourceManager类使用 resx 文件中的资源(当然没有为每个资源生成的属性,如前一种情况):
open Library1
open System.Resources
[<EntryPoint>]
let main argv =
// We are in the console application, which references Library1
// Library1 contains the .resx file.
let resourceManager = ResourceManager("Resources", typeof<Library1.Class1>.Assembly);
let x = resourceManager.GetString("String1");
0
请注意,在大写的情况下,我已将资源文件直接添加到项目中(而不是在 subfloder 中),作为名为 Resources.resx 的文件。
您还可以创建自定义包装器,将此类调用封装在属性中。