我试图消除整个解决方案中存在的所有符合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/