C# 在抽象方法中使用不符合cls的类型

C# 在抽象方法中使用不符合cls的类型,c#,code-analysis,abstract,cls-compliant,C#,Code Analysis,Abstract,Cls Compliant,我使用了一个外部程序集,无论出于何种原因,它都没有指定CLS遵从性。因此,这导致我的许多代码被标记为不符合cls。我遇到的问题如下: public abstract class SomeClass { //Compiler Error CS3011 [CLSCompliant(false)] public abstract object SomeMethod(ExternalNonCompliantType arg); } public abstract class S

我使用了一个外部程序集,无论出于何种原因,它都没有指定CLS遵从性。因此,这导致我的许多代码被标记为不符合cls。我遇到的问题如下:

public abstract class SomeClass
{
    //Compiler Error CS3011
    [CLSCompliant(false)]
    public abstract object SomeMethod(ExternalNonCompliantType arg);
}

public abstract class SomeClass
{
    //Argument type 'External.ExternalNonCompliantType' is not CLS-compliant
    public abstract object SomeMethod(ExternalNonCompliantType arg);
}

CS3011:

类成员不能既抽象又不符合 公共语言规范(CLS)。CLS指定所有 实行班级成员制

我真的不知道该怎么办…

  • 您正在编写的代码的预期用途是什么
  • 您能否将整个程序集设置为
    [clscompaint(false)]
如果您的程序集也不兼容,那么您应该可以使用这种代码。您还可以尝试将一个类标记为不符合。我总是在整个集会上做标记

如果这只是您的代码,并且您没有将其作为库分发,那么这不应该是一个问题,您也不需要太担心CLS遵从性


一个例外是,如果您正在内部编写一些您希望能够在多种其他CLR语言(如F#、vb.net、ironpython、boo、M、scala等)中重用的内容,那么情况可能并非如此;大多数应用程序都只是简单的应用程序

我正在编写一个我计划分发的库,我希望我的库符合CLS。我将投赞成票,因为将整个班级标记为不符合cls的建议使警告消失了,这是有道理的。我只是希望有更好的方法。如果你正在写一个图书馆,那么是的,我想这很重要:)我们大多数人都没有。事实上,如果预期的消费者是同一种语言(c#),那么使用它就不会有问题,但对于那些不得不标记为不符合cls的人来说,这并不好。