INotifyPropertyChanged.PropertyChanged реализовано и не реализовано;Ошибка сборки Visual Studio - PullRequest
4 голосов
/ 02 января 2012

Я часто вижу странную ошибку сборки.Иногда после ввода некоторого кода мы получаем следующую ошибку сборки:

Class 'clsX' must implement 'Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs)' for interface System.ComponentModel.INotifyPropertyChanged'.   

И

'PropertyChanged' cannot implement 'PropertyChanged' because there is no matching event on interface 'System.ComponentModel.INotifyPropertyChanged'.

Эти ошибки никогда не должны идти вместе!Обычно мы можем просто игнорировать исключение и строить решение, но достаточно часто эта ошибка останавливает нашу сборку.(это часто случается при использовании Edit и Continue, что раздражает)

Мы используем Vb.net и c #, смешанные в одном большом решении.

Удаление события PropertyChanged и повторный ввод того же кода!иногда исправляет это.

Вопрос:

Кто-нибудь еще видел эту проблему и есть некоторые предложения, как предотвратить его?

Мы используемгенератор кода, который вызывает эту ошибку, но простое редактирование некоторых файлов вручную также вызывает это исключение.Эта ошибка возникает на нескольких машинах с использованием различных настроек.

Ответы [ 4 ]

2 голосов
/ 18 января 2012

Поскольку я не могу комментировать из-за отсутствия соответствующих пунктов. Но я бы хотел поделиться своим опытом:

На странице aspx.cs, которую я работал, использовал для прекрасной компиляции и некоторое время выдавал загадочную ошибку переменной, не определенной, или функции, не определенной, или переменной, или функции, определенной два раза. Я, возможно, изменил каждую переменную и имя функции, но это, казалось, не имело никакого эффекта, но после ввода простого пробела или новой строки в любом месте файла, используемого для устранения ошибки компиляции. Однажды я попытался сохранить файл (в другой кодировке , как я привык к экспериментам ) и обнаружил, что файл не сохраняется в правильной кодировке (то есть кодировка ANSI поскольку файл имел символ Unicode), я удалил символ Unicode, и эта ошибка компиляции меня больше не беспокоила.

Эта проблема с символами юникода может быть (не жестким и быстрым правилом), чтобы вы могли ее проверить.

2 голосов
/ 16 января 2012

Кто-то обсуждал ту же самую проблему здесь . Похоже, что в этой сборке есть проблема со старым бинарным файлом. Я бы попробовал следующее по порядку:

  • Убедитесь, что все ссылки на сборки по возможности используют ссылки на проекты в решении Visual Studio.
  • Отключите распараллеливание сборки, если в параллельных сборках проекта есть странная проблема с блокировкой файлов. Перейдите в Инструменты -> Параметры, Проекты и решения -> Построить и запустить, затем установите «максимальное количество сборок проекта parrellel» на 1. Не лучшее решение, но оно может помочь сузить проблему.
  • Отключите Процесс хостинга , если он блокирует какой-либо файл, что приводит к неправильной сборке сборки. Для проекта C # перейдите в Свойства проекта, вкладка Отладка и снимите флажок «Включить процесс размещения Visual Studio». Для проекта VB.NET вам необходимо выгрузить проект, отредактировать файл проекта и добавить false в группу PropertyGroup каждой конфигурации. Опять же, не лучшее решение, но вы, вероятно, не заметите разницу.
  • Наконец, попробуйте выполнить Clean + Build, чтобы попытаться решить проблему, когда она возникает (я знаю, что это не исправление, но это достаточно просто сделать), Перестройка может немного отличаться от Clean + Build так что попробуйте второе, если первое не работает.
1 голос
/ 17 января 2012

Когда вы получаете ошибку, она всегда на стороне VB, вызывающей на C #, или наоборот, или она работает в обоих направлениях?

Если ответом является любая из первых двух ситуаций, попробуйте собратьпроект «вызываемый» в решении перед созданием проекта «вызывающий», чтобы посмотреть, не остановит ли он ситуацию.

Кроме того, на всякий случай может возникнуть вопрос, о котором вам стоит подумать, возникает ли эта ошибка, когдаВы меняете файл VB или файл C #, или нет никакой корреляции?

О, и извините, это похоже на ответ, а не на комментарий, я пока не могу оставлять комментарии (нужно 50 повторений).

1 голос
/ 17 января 2012

Обнуление и восстановление с использованием системы контроля версий (инструкции TFS здесь):

  • Убедитесь, что все проверено в
  • Выйдите из Visual Studio
  • Переименуйте каталог проектаto .Bak (фактически удаляя его)
  • Повторно открыть Visual Studio и в системе управления версиями:
    • Получить определенную версию
    • проверить «Перезаписать ... не извлечено»и «Перезаписать ... даже если локальная версия соответствует»
  • Повторно открыть проект

Другая проблема: убедитесь, что некоторые исходные файлы не новее, чемтекущая дата (или ваша дата установлена ​​обратно).Часто это происходит в приложениях, где вы выполняете логику, которая требует, чтобы определенные вещи происходили по-разному в определенные даты.Вы изменяете свои часы, чтобы протестировать их, вносите изменения в источник с продвинутой датой, устанавливаете дату назад и альт, перестройка не перестраивает этот файл.

Вы говорите «набрав его снова» - можете попробовать просто сохранить?После 40 лет, прошедших с MULTIX, сборка .net по-прежнему решает, что изменилось, проверяя временную метку файла.

удачи!

...