我试图消除整个解决方案中存在的所有符合CLS的错误。虽然我设法整理出了一些(例如,以下划线开头并使用无符号整数的公共(public)变量),但我似乎仍然找不到其中一些失败的原因。

我已经粘贴了与其中一个问题相关的所有代码,虽然有很多代码,但是它仅由表单构造函数,接口(interface)和实现该接口(interface)的类组成。

VB.Net表单构造函数(警告在unitOfWork参数上,并且读取参数'unitOfWork'的类型不符合CLS:

Public Sub New(ByRef unitOfWork As IUnitOfWork)

    MyBase.New()
    InitializeComponent()

    _unitOfWork = unitOfWork

End Sub

接口(interface)IUnitOfWork如下:
public interface IUnitOfWork : IDisposable
{
    bool IsInTransaction { get; }

    bool IsDirty { get; }

    object BeginTransaction();

    object BeginTransaction(IsolationLevel isolationLevel);

    void Commit();

    void Rollback();

    object Session { get; }
}

接口(interface)的唯一实现(因此将其实例传递给表单构造函数)是:
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);
    }
}

我或者对这个问题视而不见(可能是因为我一直盯着这个问题!),或者我还没有意识到另一个CLS遵从性限制。有什么建议么?

最佳答案

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

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

关于c# - 为什么此参数不符合CLS?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19277004/

10-11 06:38