在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; } }
于是找了很多方法。如下:
- 删除窗体中对应.resx后对文件里面的
<data>...</data>
节点
结果:报错,控件大小或参数改变会重新添加节点 - 将对应的报错节点的
bytearray.base64
改成bytearray.base32
结果:报错,控件大小或参数改变会重新添加节点 - 把序列化的类单独写在一个cs文件内
结果:报错,控件大小或参数改变会重新添加节点 - 将对应的
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>()));
结果:报错,控件大小或参数改变会重新添加节点 - 在引用的类添加注释
private List<TimeLineItem> timeLineItems; [Description("项列表"), Category("自定义")] //代码生成器产生对象内容的代码,而不是对象本身的代码。 [DesignerSerializationVisibility(DesignerSerializationVisibility.Content), MergableProperty(false)] public List<TimeLineItem> TimeLineItems { get { return timeLineItems; } set { timeLineItems = value; } }
结果:节点不会重新添加
大家有什么好的解决之道欢迎留言指正
原文参考地址
stackoverflow
CSDN论坛
原文地址:https://www.cnblogs.com/kris-wang/p/12208194.html
时间: 2024-10-25 19:52:42