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

Posted kris-wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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论坛

以上是关于Resx 文件无效。未能加载 .RESX 文件中使用的类型 System.Collections.Generic.List`1请确保已在项目中添加了必需的引用。的主要内容,如果未能解决你的问题,请参考以下文章

C#中无效的Resx文件。

如何创建 resx 文件

循环遍历 .resx 文件中的所有资源

Visual Studio C# 更新本地化语言 resx

防止资源 [.resx] 文件预编译。 .NET 核心 2.0

如何继承资源文件(resx)