C# 为什么此参数不符合CLS?

C# 为什么此参数不符合CLS?,c#,vb.net,cls-compliant,C#,Vb.net,Cls Compliant,我试图消除我们在整个解决方案中遇到的所有符合CLS的错误。虽然我已经成功地整理了几个(例如,以下划线开头的公共变量和使用无符号整数),但有几个我似乎找不到失败的原因 我已经粘贴了与其中一个问题相关的所有代码,有相当多的代码,但它只包含一个表单构造函数、接口和实现接口的类 VB.Net表单构造函数(警告位于unitOfWork参数上,并读取参数“unitOfWork”的类型不符合CLS: 界面IUnitOfWork如下所示: public interface IUnitOfWork : IDisp

我试图消除我们在整个解决方案中遇到的所有符合CLS的错误。虽然我已经成功地整理了几个(例如,以下划线开头的公共变量和使用无符号整数),但有几个我似乎找不到失败的原因

我已经粘贴了与其中一个问题相关的所有代码,有相当多的代码,但它只包含一个表单构造函数、接口和实现接口的类

VB.Net表单构造函数(警告位于
unitOfWork
参数上,并读取参数“unitOfWork”的类型不符合CLS:

界面
IUnitOfWork
如下所示:

public interface IUnitOfWork : IDisposable
{
    bool IsInTransaction { get; }

    bool IsDirty { get; }

    object BeginTransaction();

    object BeginTransaction(IsolationLevel isolationLevel);

    void Commit();

    void Rollback();

    object Session { get; }
}
接口的唯一实现(因此其实例将传递给表单构造函数)是:

我要么对这个问题视而不见(可能是这样,因为我已经盯着这个问题看了很久了!)或者还有另一个我不知道的CLS合规性限制。有什么建议吗?

我猜您的C#库本身没有标记为CLSCompliant。我只是复制了错误,VB项目标记为CLSCompliant,它引用的C#库没有标记为CLSCompliant


我将C#library CLSCompliant标记为,警告消失。

\u unitOfWork
变量
private
还是另一种可访问性?当我在C中遇到类似问题时,这是因为我有一个
受保护的
变量,该变量以
\ucode>开头。CLS不允许在以e开头的名称中使用下划线exposed to other class.Brute-force方法:尝试注释接口中的方法,看看这是否会使警告消失?我无法使用您的代码重新编写警告posted@AakashM
IUnitOfWork
不涉及那些声明
IUnitOfWork
标记为CLS兼容的程序集?是的,我们会的!非常感谢!
public interface IUnitOfWork : IDisposable
{
    bool IsInTransaction { get; }

    bool IsDirty { get; }

    object BeginTransaction();

    object BeginTransaction(IsolationLevel isolationLevel);

    void Commit();

    void Rollback();

    object Session { get; }
}
public class UnitOfWork : IUnitOfWork
{
    private ISession _session;

    public UnitOfWork(SMSession session)
    {
        if (session == null)
        {
            throw new ArgumentNullException("Session wasn't supplied");
        }

        this._session = (ISession)session.OpenSession();
    }

    public bool IsInTransaction
    {
        get { return this._session.Transaction.IsActive; }
    }

    public bool IsDirty
    {
        get { return this._session.IsDirty(); }
    }

    public object Session
    {
        get { return this._session; }
    }

    public object BeginTransaction() 
    {
        return this._session.BeginTransaction(IsolationLevel.ReadCommitted);
    }

    public object BeginTransaction(IsolationLevel isolationLevel) 
    {
        return this._session.BeginTransaction(isolationLevel);
    }

    public void Commit()
    {
        if (this._session.Transaction == null)
        {
            throw new NullReferenceException
                ("The Transaction has not been initialised");
        }

        this._session.Transaction.Commit();
    }

    public void Rollback()
    {
        if (this._session.Transaction == null)
        {
            throw new NullReferenceException
                ("The Transaction has not been initialised");
        }

        this._session.Transaction.Rollback();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                this._session.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        if (this._session != null)
        {
            this._session.Dispose();
        }

        Dispose(true);
        GC.SuppressFinalize(this);
    }
}