【问题标题】:Properties.Resources.XXXX Namespace or Module not DefinedProperties.Resources.XXXX 命名空间或模块未定义
【发布时间】:2013-07-12 23:03:36
【问题描述】:

我正在尝试从我的Resources 中读取 XML 文件的文本(作为string)。 XML 文件名为MyXMLResourceFile.resx

我尝试使用 C# 方式使用

let myFile : string = Properties.Resources.MyXMLResourceFile

但它给了我错误(在Properties 下):

The namespace or module 'Properties' is not defined.

我假设我错过了open,但不知道它会是什么。

抱歉,我对来自 VB 的 F# 还是很陌生。

其他信息:

我根据这个SO answer 自己制作了resx 文件,然后我查看了其他人如何访问它。在 C# 中他们做了 Properties.Resources.XXXX per this project 我看到你可以使用 ResourceManager 但没有看到任何方法可以将整个文件直接读入 string

【问题讨论】:

  • 能否请您说明您正在创建什么样的应用程序(ASP.NET、WPF 或其他?)以及您是如何创建它的(使用一些模板?)
  • 我正在创建一个库。我没有使用模板。

标签: f#


【解决方案1】:
The namespace or module 'Properties' is not defined.

那是因为没有定义命名空间属性。您可能从另一个项目中带来了 resx 文件。打开关联的 .Designer 文件,如果 F# 项目中没有出现,请在原始项目中打开。假设原始项目在 C# 中,您将看到一个名称空间和一堆 C# 代码。此文件的命名空间必须与您尝试调用它的项目的命名空间相同。

但是,由于这是 C# 代码,它不会在 F# 项目上运行。您有两个选择:使用代码生成器在带有 Properties 命名空间的 F# 代码中生成关联的 .Designer 类,(我不知道这样的生成器是否存在);或者在原始项目中预编译 resx 并将其作为 dll 从您的 F# 项目中引用,然后您可以使用 ResourceManager 访问它。

【讨论】:

  • 请参阅我的评论中的“附加信息”。我实际上认为我可能已经想到了一种方法 - 使 XML 等于一个变量然后获取该变量,也许?我不知道这是否可行,因为它使用了新行。
  • 第二个链接向您展示了如何使用 ResourceManager。这不是你想要的吗?还是要将实际的 XML 读入字符串,而不是值?
  • 是的,我需要将其读入字符串而不是值。我将使用 FSharp.Data 读取动态 XML 的值。我只需要嵌入的 XML 作为 FSharp.Data 的模板。 fsharp.github.io/FSharp.Data/library/XmlProvider.html
  • 如果想把xml读成字符串,File.ReadAllText不就解决了吗?
  • 是的,但我希望嵌入文件。我想我不需要——尽管这样会更好。没想到嵌入这么难。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-21
相关资源
最近更新 更多