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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
[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论坛

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄