这个让我难过。我在使用合同的方法是接口实现的场景中使用代码约定。所以,我使用抽象的ContractClassFor方法来定义合同要求。这适用于其中一个实现类(它恰好与接口在同一个项目中),但契约永远不会应用于第二个实现(在单独的项目中)。两个项目都具有相同的代码合同设置(标准合同要求;完整运行时合同检查)。这是代码中的场景:
namespace First.Interfaces {
[ContractClass(typeof(ContractForIMyClass))]
public interface IMyClass {
void MyMethod(int id);
}
[ContractClassFor(typeof(IMyClass))]
public abstract class ContractForIMyClass : IMyClass
{
void MyMethod(int id) {
Contract.Requires<ArgumentException>(id != 0);
}
}
}
namespace First {
public class MyClass : IMyClass {
public void MyMethod(int id) {
//contract is applied here
}
}
}
namespace Second {
public class MyTestClass : IMyClass {
public void MyMethod(int id) {
//contract is not applied
}
}
}
任何想法在哪里都非常感激。
答案 0 :(得分:4)
为此,您需要做两件事:
可以从Visual Studio中相应项目的属性页中的“代码约定”部分控制这两个选项。 (如果您在单个解决方案中使用标准项目引用,则在修复#1后,您可能不需要为#2执行任何操作。)