Этот вид эзотерический. Я побежал в NullReferenceException при попытке открыть форму (в конструкторе WinForms) в проекте WinForms в Visual Studio 2008. трассировки стека указывает на четвертой строке следующего кода:Почему '{' выбрасывает исключение NullReferenceException в статическом методе?
public static class Logger
{
public static void LogMethodEnter()
{
var frame = new StackFrame(1);
var method = frame.GetMethod();
Trace.TraceInformation("{0}.{1}.{2}()", method.DeclaringType.Namespace, method.DeclaringType.Name, method.Name);
Trace.Indent();
}
public static void LogMethodExit()
{
Trace.Unindent();
}
}
... смысл линия с открывающей фигурной скобкой. Я столкнулся с той же проблемой (но не с участием дизайнера winforms) в других проектах, и я думаю, что это была проблема, связанная с потоками, но у меня нет кода для ее репликации.
Почему это происходит и почему трассировка стека исключений указывает на линию с фигурной скобкой?
Уточнение: Исключительное исключение с ссылкой только в дизайнере winforms. Когда приложение запускается, оно не вызывает эту ошибку.
Вы пробовали смотреть на разборки? Возможно, вы сможете увидеть, что он там делает (хотя у меня не было большого успеха получать символы для работы в разборном представлении). Существует также тонкая возможность запуска кода, который не соответствует вашему источнику. – Rup
Вы пробовали очистить раствор и перестроить? – FrustratedWithFormsDesigner
@Rup: Согласитесь с кодом, который VS жалуется на не синхронизацию с файлом - возможно, он работает с чем-то, что кэшируется? – FrustratedWithFormsDesigner