Pad*_*don 6 .net c# visual-studio-2010 code-contracts
我正在尝试使用ContractClass和定义接口的代码合同ContractClassFor.当一切都在同一个程序集中时,它工作正常,但是如果我将接口定义及其各自的契约类放在不同的程序集中,那么具体的类实现,它就不再起作用了.
例如,此代码有效:
namespace DummyProject
{
[ContractClass(typeof(AccountContracts))]
public interface IAccount
{
void Deposit(double amount);
}
[ContractClassFor(typeof(IAccount))]
internal abstract class AccountContracts : IAccount
{
void IAccount.Deposit(double amount)
{
Contract.Requires(amount >= 0);
}
}
internal class Account : IAccount
{
public void Deposit(double amount)
{
Console.WriteLine(amount);
}
}
class Program
{
static void Main(string[] args)
{
Account account = new Account();
// Contract.Requires will be checked below
account.Deposit(-1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个单独的项目,具有以下内容:
namespace SeparateAssembly
{
[ContractClass(typeof(SeparateAssemblyAccountContracts))]
public interface ISeparateAssemblyAccount
{
void Deposit(double amount);
}
[ContractClassFor(typeof(ISeparateAssemblyAccount))]
internal abstract class SeparateAssemblyAccountContracts
: ISeparateAssemblyAccount
{
void ISeparateAssemblyAccount.Deposit(double amount)
{
Contract.Requires(amount >= 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我写的话,那么在主项目(上面的不同组件)中:
namespace DummyProject
{
internal class AccountFromSeparateAssembly
: ISeparateAssemblyAccount
{
public void Deposit(double amount)
{
Console.WriteLine(amount);
}
}
class Program
{
static void Main(string[] args)
{
ISeparateAssemblyAccount accountFromSeparateAssembly =
new AccountFromSeparateAssembly();
// Neither of the two statements below will work
// Contract.Requires will be ignored
accountFromSeparateAssembly.Deposit(-1);
((AccountFromSeparateAssembly)accountFromSeparateAssembly).Deposit(-1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后Contract.Requires不再检查Deposit方法.
请问有什么想法吗?非常感谢!
我设法通过在包含和 的项目的代码合同设置中选择Contract Reference Assembly=来使其工作。BuildISeparateAssemblyAccountSeparateAssemblyAccountContracts
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |