По причинам ... ну, некоторый намек на симптом поможет. Одна возможность состоит в том, что у вас есть код для метода, такого как Debug.WriteLine
, который имеет побочные эффекты (то есть заставляет его работать). Вызовы методов, отмеченные [Conditional(...)]
, не компилируются, если только вы не определили правильные символы - поэтому все, помеченное [Conditional("DEBUG")]
, будет молча отброшено.
Это также может быть ошибка компилятора, но это немного маловероятно (но не невозможно).
Какой симптом? Как это ломается?
В качестве примера приведенного выше:
static string Bar { get; set; }
static void Main()
{
Bar = "I'm broken";
Debug.WriteLine(Foo());
Console.WriteLine(Bar);
}
// note Foo only called in DEBUG builds
static string Foo()
{
Bar = "I'm working";
return "mwahahah";
}
Скомпилированный в режиме DEBUG выводит «Я работаю»; скомпилированный в режиме RELEASE он печатает "Я сломан". Это звучит похоже? Убедитесь, что вы не вызываете методы отладки напрямую с вещами, которые имеют побочные эффекты. В большинстве случаев вы можете исправить по косвенной:
string foo = Foo();
Debug.WriteLine(foo);
Теперь он вызывается в любом режиме.