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

标签 c# vb.net cls-compliant

我正在努力消除我们在整个解决方案中遇到的所有符合 CLS 的错误。虽然我已经设法解决了几个(例如,以下划线开头并使用无符号整数的公共(public)变量),但有一些我似乎无法找到它们失败的原因。

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

VB.Net 表单构造函数(警告在 unitOfWork 参数上显示为 Type of parameter 'unitOfWork' is not CLS-compliant:

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/

相关文章:

asp.net - 将 Gridview 导出到 Excel,并将行格式化为文本

c# - C# 和 VB 中的锯齿状数组 CLS 合规性不同?

.net - 将项目中的所有类标记为符合 CLS

c# - 如何使用 NAudio 将声音文件加载到内存中并在以后使用?

c# - Silverlight Prism : How to maintain views in a specific order inside a region

.net - 如何使用 .NET 创建 JSON 数据?

visual-studio - CA1014 标记 'some.dll' 带有 CLSCompliant(true) 错误消息和 VS2010 的 StyleCop

c# - 仅当字符串不为 null 或空时附加逗号

c# - 使用 C# 访问 OpenERP

.net - 当电子邮件地址没有 @ 符号时,电子邮件正则表达式陷入无限循环