【发布时间】:2013-10-09 16:00:27
【问题描述】:
我正在尝试消除我们在整个解决方案中遇到的所有符合 CLS 的错误。虽然我已经设法整理了几个(例如,以下划线开头并使用无符号整数的公共变量),但我似乎无法找到它们失败的原因。
我已经粘贴了与其中一个问题相关的所有代码,有相当多的代码,但它只包含一个表单构造函数、接口和实现该接口的类。
VB.Net 表单构造函数(警告在unitOfWork 参数上,并读取参数'unitOfWork'的类型不符合CLS:
Public Sub New(ByRef unitOfWork As IUnitOfWork)
MyBase.New()
InitializeComponent()
_unitOfWork = unitOfWork
End Sub
接口IUnitOfWork如下:
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);
}
}
我要么对这个问题视而不见(可能是这种情况,因为我已经盯着这个问题很久了!)或者还有另一个我不知道的 CLS 合规限制。有什么建议吗?
【问题讨论】:
-
是
_unitOfWork变量private还是另一种可访问性?当我在 C# 中遇到类似问题时,这是因为我有一个以_开头的protected变量。 CLS 不允许在暴露给其他类的名称中使用前导下划线。 -
暴力破解方法:尝试注释掉界面中的方法,看看是否会使警告消失?
-
我无法使用您发布的代码重现警告
-
@AakashM
IUnitOfWork不会碰那些 -
声明
IUnitOfWork的程序集是否标记为符合CLS?
标签: c# vb.net cls-compliant