Почему Visual Studio 2015 не работает с кодом ошибки BC30506
У меня есть очень большой проект, который я перешел с Visual Studio 2012 на 2015 год около месяца назад.
Код это звук. Он составляет 99,9999% времени, за исключением двух последних дней, когда у меня случался этот случайный случай.
Я использую обфускатор (платная версия Eazfuscator) для создания решения.
В течение последних двух дней я могу работать, все компилируется снова и снова и работает просто отлично, но когда я иду, чтобы скомпилировать проект в запутанном режиме, ИНОГДА компилятор выходит из строя и заполняет Список ошибок следующим образом:
Код серьезности Описание Ошибка строки файла проекта
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Многообразные формы \Main Application\frmHome.vb 719 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Многообразные формы \Main Application\frmUpdate.vb 5 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Многообразные формы \Main Application\frmUpdate.vb 9 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 13 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Многообразные формы \ Главное приложение \frmUpdate.vb 17 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Miscellaneous Forms\Main Application\frmUpdate.vb 38 Ошибка
BC30506 Для предложения Handles требуется переменная WithEvents, определенная в содержащем типе или в одном из его базовых типов. wRMS D:_Private\wRMS\wRMS_Многообразные формы \Main Application\frmUpdate.vb 42 Blockquote
Нажатие Clean из меню Build ничего не меняет.
У меня есть множество пользовательских элементов управления (кнопки, флажки, списки и т. Д.), Которые я создал и использовал в формах. Eazfuscator запутывает имена этих элементов управления во время компиляции, что делает формы больше не видимыми в конструкторе (это всегда было симптомом); но теперь среда IDE не позволяет мне перестраивать решение после его обфускации, если я вижу вышеупомянутые ошибки, и я не могу даже перестроить его без обфускации. Я просто застрял.
К сожалению, когда это происходит, проект больше не будет компилироваться, я должен в основном восстановить проект из резервных копий и потерять свою работу.
Чем это вызвано? Что я могу сделать? Можно ли как-то очистить решение, чтобы среда IDE просто перестраивалась напрямую из исходного кода и вообще не смотрела на запутанный вывод?
1 ответ
Проблема заключается в VS2015, вы не можете скрыть сборку в режиме отладки, IDE будет "волноваться", потому что имя объекта пользовательского элемента управления было изменено на бред. Он удалит элементы управления, и по какой-то причине даже стандартные элементы управления WinForms вокруг него.
Решение состоит в том, чтобы позволить вашему обфускатору запутывать только в режиме релиза, отредактировав событие после сборки, чтобы сказать что-то вроде этого (в зависимости от вашего обфускатора):
if /I "$(ConfigurationName)" == "Release" Eazfuscator.NET.exe "$(TargetPath)" --msbuild-project-path "$(ProjectPath)" --msbuild-project-configuration "$(ConfigurationName)" --msbuild-project-platform "$(PlatformName)" --msbuild-solution-path "$(SolutionPath)" -n --newline-flush -v 5.1
К сожалению, если вы натолкнулись на эту проблему, ваш исходный код обнулен, и вам нужно восстановить из резервной копии.
Иметь некоторые DevOps на месте и постоянные резервные копии; так как постоянно указывается утверждение:
if /I "$(ConfigurationName)" == "Release"
Кажется, я исправил мои проблемы навсегда.
Microsoft получила уведомление, а также EAZfuscator
ОБНОВЛЕНИЕ 2017: Возвращаясь сюда два года спустя, стоит отметить, что вам нужно ОБРАТИТЬ ВНИМАНИЕ к вашей IDE. Если вы последний раз строили в режиме Release (и, очевидно, сборка была запутана), НЕ открывайте FORM до тех пор, пока вы не перестроите сначала в режиме Debug. Режим отладки сбрасывает состояние сборки до беспрепятственного, и вы можете просматривать свои формы без проблем.
Если вы случайно открыли форму в запутанном режиме Release, и она не работает на дисплее, просто закройте все окна внутри IDE, оставив IDE открытой, и перестройте в режиме отладки. Теперь вы можете продолжить без проблем.