Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.
Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.
Кодовые контракты были введены в .NET 4.0, и они предоставляют язык-агностический метод для выражения предположений о кодировании в программах.
Они в основном позволяют вам проверять предварительные условия, пост-условия и другие функции и могут значительно улучшить процесс тестирования и возможное качество кода, который записывается.
Microsoft:
Подробнее:
Кодовые контракты являются относительно новым способом выполнения проверок ввода и вывода функций. Там, где они отличаются от стандартной проверки типа Assert
, выполняется то, что сгенерированный IL, который проверяет ввод, проверяет его непосредственно перед вызываемой функцией и код, который проверяет вывод, после того, как ваша функция действительно вышла.
Почему это полезно?
Ну, это мешает вам изменять переменные после того, как вы думаете, что ваша функция может вернуться, тем самым потенциально представляя ошибки.
Вот пример.
public void doSomething(SomeObject foo)
{
Contract.Requires<ArgumentNullException>(foo != null);
}
Теперь в кодовых контрактах требуется, чтобы перед этой проверкой не было кода. В сгенерированном ИЛ значение foo
проверяется PRIOR на вызов. Это надежный способ гарантировать, что ваш вход будет таким, как ожидалось.
Другой - это Contract.Ensures
. Это в основном похоже на Requires
, но работает с вашим возвращаемым значением.
public int doSomethingElse()
{
Contract.Ensures(Contract.Result<int>() != 0);
int ret = 1;
return ret;
}
Это было бы особенно полезно, если бы у вас было несколько путей выхода из вашей функции ...
public int someBadFunction()
{
Contract.Ensures(Contract.Result<int>() != 0);
if(....)
{
if(....) return 2;
if(....) return 8;
}
return 3;
}