首页 > 解决方案 > .Net Core Resources 给出 null 而不是字符串

问题描述

我正在尝试在我的 .Net Core控制台应用程序中使用资源 (.resx),但由于某种原因,我无法从资源中获取字符串,而是总是得到空值。这是重现该问题的示例代码:

using System;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Resources.Message);
        }
    }
}

这是Resources.resx文件内容:

<?xml version="1.0" encoding="utf-8"?>

<root>
    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:element name="root" msdata:IsDataSet="true">
            <data name="Message">
                <value>Hello world!</value>
            </data>
        </xsd:element>
    </xsd:schema>
    <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
    </resheader>
    <resheader name="version">
        <value>1.3</value>
    </resheader>
    <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
</root>

我正在使用 Mac 和 dotnet core 2.2.100(似乎是最新版本)。添加 Microsoft.Extensions.Localization 没有帮助。

标签: c#.net-core

解决方案


您的字符串在 xml 中的错误位置定义:

<root>   
  ...
  <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="Message" xml:space="preserve">
    <value>Hello World!</value>
  </data>
</root>

推荐阅读