Наше приложение перемещает некоторые файлы, необходимые для запуска во время запуска.
Приложение заботится (при выключении), чтобы правильно остановить каждый процесс, использующий эти файлы.
Однако, если приложение вылетает / или вы просто нажимаете «stop» в VS при отладке - некоторые исполняемые файлы могут все еще работать.
Таким образом, если вы быстро перезапустите приложение, может произойти сбой попытки копирования из-за того, что файл все еще используется.
В этом случае мы просто игнорируем неудачную попытку копирования - или, точнее, неудачную попытку удаления, которая должна гарантировать, что доступна последняя версия:
foreach(String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try
{
System.IO.File.Delete(entry);
}catch (Exception e)
{
//ignore during this startup.
}
}
}
Теперь это прекрасно работает, так как существует версия файла, доступная для использования, а рабочая версия просто игнорирует исключение.
Досадная проблема в том, что отладчик «ломается» каждый раз, когда возникает эта ошибка.
- Мы не хотим вообще "игнорировать" любые
System.IO.IOException
, брошенные во время отладки.
- Мы попытались аннотировать метод в вопросе с помощью
[System.Diagnostics.DebuggerStepThrough()]
, который работает, но вызывает исключение, которое будет перехвачено в позиции вызывающих.
Итак, есть ли способ игнорировать "некоторые" исключения, возникающие в определенной строке кода, даже если включен общий "взлом" для такого рода?
Некоторые #if (DEBUG)
-Директивы, которые позволят избежать исключения для этой конкретной строки кода?
Что-то вроде:
foreach(String entry in contents)
{
if (System.IO.File.Exists(entry))
{
try
{
#if (DEBUG:NoThrow)
System.IO.File.Delete(entry);
#endif
}catch (Exception e)
{
//ignore during this startup.
}
}
}