Ссылаясь на «Диспетчер конфигураций» в меню «Сборка»,
Есть ли способ прокомментировать мой код C #, чтобы закомментированный код не компилировался, пока решение находится в режиме отладки, но компилировался, если я изменил его в режим выпуска?
Зачем мне это нужно? Причина, по которой я хочу иметь код, который будет скомпилирован в режиме Release, но не в Debug, заключается в том, что у меня есть код, который не будет работать с моего ПК для разработки (код, который отправляет электронные письма с моего хоста и т. Д.).
Вместо того, чтобы возвращаться к моему коду и раскомментировать строки перед публикацией, я бы хотел, чтобы это происходило автоматически.
4 ответа
Возможно, вы ищете что-то вроде этого:
#if DEBUG
Console.WriteLine("Debug Mode");
#else
Console.WriteLine("Release Mode");
#endif
Если вас интересует только режим выпуска, вы можете использовать:
#if !DEBUG
Console.WriteLine("Release Mode");
#endif
Возможно, я ошибаюсь, но мне кажется, что комментарии компилятором игнорируются. Если я посмотрю на свою сборку с помощью .NET Reflector, я не найду никаких комментарии, о существовании которых я знаю.
Метод BlueMonkMN будет работать для запуска разного кода в зависимости от режима компиляции.
Если вы хотите, чтобы в зависимости от используемого режима компиляции (и других переменных) выполнялся другой код, ознакомьтесь с PostSharp < / а>. Это компилятор после компиляции, который может добавлять и удалять код для вашей сборки.
Пример использования: - Я люблю получать подробную информацию об отладке и трассировке моих проектов. - Я ненавижу использовать инструкцию print
или trace.write
после каждого результата или вызова метода, поскольку этот дополнительный код отладки скрывает функцию, выполняющую работу.
Вы можете настроить PostSharp для динамического создания этой дополнительной отладочной информации! Несколько настроек конфигурации, и вы можете распечатать каждый вызов каждой функции И результат (с переменным содержимым) каждого вызова. Это позволяет очень легко следить за логикой программы.
Я бы попытался решить вашу проблему с помощью объектно-ориентированного метода. Используя внедрение зависимостей, я бы создал класс, который выполняет необходимые вам действия отладки.
Что-то типа:
public class MyClass {
public MyClass(IDoOtherStuff stuffToDo) {
DoOtherStuff = stuffToDo;
}
private IDoOtherStuff DoOtherStuff { get; set; }
public void Do() {
DoOtherStuff.BeforeDo();
// Blah blah blah..
DoOtherStuff.AfterDo();
}
}
public interface IDoOtherStuff {
void BeforeDo();
void AfterDo();
}
public class DebugOtherStuff : IDoOtherStuff {
public void BeforeDo() {
Debug.WriteLine("At the beginning of Do");
}
public void AfterDo() {
Debug.WriteLine("At the end of Do");
}
}
public class ReleaseOtherStuff : IDoOtherStuff {
public void BeforeDo() { }
public void AfterDo() { }
}
Теперь вы можете использовать контейнер Inversion of control, например Windsor, Unity < / a>, Ninject или Spring.NET, чтобы настроить среду разработки и среду выпуска.
Для этой цели вы можете использовать атрибут Conditional для методов (но не для отдельных строк кода).
Например, следующее будет скомпилировано только в сборки DEBUG.
[Conditional("DEBUG")]
public void MyMethod()
{
// Do Stuff
}
Символ DEBUG уже указан в настройках проекта. Вам нужно будет создать свой собственный символ для релизной сборки, скажем «RELEASE», чтобы вы могли сделать это:
[Conditional("RELEASE")]
public void MyMethod()
{
// Do Stuff
}
Однако я бы рекомендовал отступить и взглянуть на вашу проблему заново с более высокого уровня, поскольку я бы не рекомендовал это решение.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.