为什么我的班级不符合CLS?

Pav*_*ska 7 c# cls-compliant .net-4.5

这真让我感到困惑.我已经尝试删除只读,更改名称..我在这里做错了什么?

public abstract class CatalogBase<T> where T : class
{
    protected readonly String DataPath;
    protected readonly XmlSerializer Serializer;
    private readonly XmlSerializerNamespaces _namespaces;

    protected CatalogBase(String dataPath)
    {
        DataPath = dataPath;
        Serializer = new XmlSerializer(typeof (T));
        _namespaces = new XmlSerializerNamespaces();
        _namespaces.Add(String.Empty, String.Empty);
    }

    public virtual void Write(T obj)
    {
        var streamWriter = new StreamWriter(DataPath);

        Serializer.Serialize(streamWriter, obj, _namespaces);
        streamWriter.Close();
    }

    public abstract IDictionary<String, T> Read();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

警告:

警告1'Ar.ViewModel.Workspaces.MaterialCatalogBase':基本类型'Or.Files.CatalogBase'不符合CLS C:_Center_Work_Programming_Cs\Ar\Ar\ViewModel\Workspaces\MaterialCatalogBase.cs 9 18 Ar

EDIT2:

即使我改变了下面的类,我仍然得到错误:

public abstract class CatalogBase<T> where T : class
{
    protected readonly String DataPath;
    protected readonly XmlSerializer Serializer;
    private readonly XmlSerializerNamespaces namespaces;

    protected CatalogBase(String dataPath)
    {
        DataPath = dataPath;
        Serializer = new XmlSerializer(typeof (T));
        namespaces = new XmlSerializerNamespaces();
        namespaces.Add(String.Empty, String.Empty);
    }

    public virtual void Write(T obj)
    {
        var streamWriter = new StreamWriter(DataPath);

        Serializer.Serialize(streamWriter, obj, namespaces);
        streamWriter.Close();
    }

    public abstract IDictionary<String, T> Read();
}
Run Code Online (Sandbox Code Playgroud)

另外,我忘了提到我出于某种原因得到两个(完全相同的错误)..?

Lan*_*kin 6

看起来您具有以下条件:

  • 大会A宣布CatalogBase<T>。程序集A 标记为CLSCompliant
  • 程序集B引用程序集A。程序集B声明MaterialCatalogBase : CatalogBase<T>。程序集B 标记为符合CLS

如果是这种情况,CatalogBase<T>则应使用CLSCompliant属性标记您的类所在的程序集:

[assembly: CLSCompliant(true)]
Run Code Online (Sandbox Code Playgroud)