Resx 文件无效。未能加载 .RESX 文件中使用的类型 System.Collections.Generic.List`1请确保已在项目中添加了必需的引用。

在C#程序编写过程中,会遇到:Resx 文件无效。未能加载 .RESX 文件中使用的类型 System.Collections.Generic.List1`请确保已在项目中添加了必需的引用
主要原因很可能是使用了类的可序列化的原因,代码如下:

[Serializable]
public class TimeLineItem
{
    public string Title;
    public string Content;

    public TimeLineItem(string content)
    {
        this.Title = DateTime.Now.ToString("MM-dd hh:mm:ss");
        this.Content = content;
    }
}

于是找了很多方法。如下:

  1. 删除窗体中对应.resx后对文件里面的<data>...</data>节点
    结果:报错,控件大小或参数改变会重新添加节点
  2. 将对应的报错节点的bytearray.base64改成bytearray.base32
    结果:报错,控件大小或参数改变会重新添加节点
  3. 把序列化的类单独写在一个cs文件内
    结果:报错,控件大小或参数改变会重新添加节点
  4. 将对应的App.Designer.cs内的this.Control1.TimeLineItems = ((System.Collections.Generic.List<App.UserControls.TimeLineItem>)(resources.GetObject("Control1.TimeLineItems")));改成this.Control1.TimeLineItems = ((System.Collections.Generic.List<App.UserControls.TimeLineItem>)(new List<App.UserControls.TimeLineItem>()));
    结果:报错,控件大小或参数改变会重新添加节点
  5. 在引用的类添加注释
private List<TimeLineItem> timeLineItems;
[Description("项列表"), Category("自定义")]
//代码生成器产生对象内容的代码,而不是对象本身的代码。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content), MergableProperty(false)]
public List<TimeLineItem> TimeLineItems
{
    get { return timeLineItems; }
    set
    {
        timeLineItems = value;
    }
}

结果:节点不会重新添加
大家有什么好的解决之道欢迎留言指正

原文参考地址
stackoverflow
CSDN论坛

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
System.Resources命名空间提供了一些类来读取和写入RESX文件。以下是一个简单的示例,演示如何使用这些类来读取和写入RESX文件。 首先,假设你有一个名为“strings.resx”的RESX文件,其包含一些字符串资源。以下是一个示例“strings.resx文件的内容: ```xml <?xml version="1.0" encoding="utf-8"?> <root> <data name="hello" xml:space="preserve"> <value>Hello, world!</value> </data> <data name="greeting" xml:space="preserve"> <value>Welcome to my app!</value> </data> </root> ``` 现在,假设你想要读取“hello”字符串资源的值。以下是一个使用System.Resources命名空间的类来读取RESX文件的示例代码: ```csharp using System; using System.Resources; class Program { static void Main() { ResourceManager resManager = new ResourceManager("strings", typeof(Program).Assembly); string hello = resManager.GetString("hello"); Console.WriteLine(hello); } } ``` 在这个示例,我们使用ResourceManager类来读取“strings.resx文件的资源。我们使用“strings”作为资源文件的基本名称,这是文件名(不包括扩展名“.resx”)的部分。我们还指定了包含资源文件的程序集(在本例是我们的主程序集)。 然后,我们使用GetString方法获取“hello”字符串资源的值,并将其输出到控制台。 现在,假设你想要添加一个新的字符串资源到“strings.resx文件。以下是一个使用System.Resources命名空间的类来写入RESX文件的示例代码: ```csharp using System.IO; using System.Resources; using System.Xml; class Program { static void Main() { var resxWriter = new ResXResourceWriter("strings.resx"); resxWriter.AddResource("goodbye", "Goodbye, world!"); resxWriter.Generate(); resxWriter.Close(); } } ``` 在这个示例,我们使用ResXResourceWriter类来创建一个新的RESX文件,并将其命名为“strings.resx”。然后,我们使用AddResource方法将一个名为“goodbye”的字符串资源添加文件。 最后,我们调用Generate方法来生成RESX文件的内容,并调用Close方法来关闭文件。现在,“strings.resx文件将包含一个新的字符串资源“goodbye”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值