Проблема визуального наследования WinForms в VS2010 - PullRequest
3 голосов
/ 18 октября 2011

Краткая справка о рассматриваемом проекте: это C # .Net 4, WinForms с фабрикой умных клиентов и, к сожалению, много визуального наследования.

Вот краткий обзор проблемы, с которой сталкивается команда, над которой я работаю, которая кажется довольно неустойчивой:

Кто-то откроет один из проектов клиентского модуля, чтобы начать работу над одним из представлений, дважды щелкните на представлении, чтобы открыть конструктор, и Visual Studio выдаст им ошибку времени разработки, такую ​​как:

http://www.freeimagehosting.net/newuploads/f0be0.jpg

Там нет пути назад от этого; если перестроить отсюда без выполнения следующей работы, ошибка все равно будет сохраняться. Единственный наш обходной путь - это очистить клиентское решение, закрыть Visual Studio (для этого у вас есть ), снова открыть Visual Studio и пересобрать решение. В следующий раз, когда вы попытаетесь открыть представление, оно будет работать. Но ошибка вернется снова - похоже, после X количества перестроений (возможно, только когда представление открыто в конструкторе, пока вы строите решение?)

Никто не использовал время, чтобы по-настоящему разобраться в этой проблеме, и на данный момент ни у кого нет времени! Так что мне было интересно (немного длинно), может ли кто-нибудь иметь представление о том, что может происходить? Или, может быть, намекнуть, где начать копать, когда у нас будет немного времени, чтобы разобраться в этом?

1 Ответ

0 голосов
/ 29 октября 2011

Если вы используете визуальное наследование, эти проблемы являются фактом жизни, и они вряд ли когда-либо исчезнут.

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

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

Примером этого является случай, когда вы удаляете BindingSource на своей форме и устанавливаете для его источника данных тип из другой сборки.

(Ну, это всегда из другой сборки, потому что я никогда не определяю типы в той же сборке, что и мой пользовательский интерфейс. Поэтому, насколько я знаю, возможность межсборочной сборки может даже не быть фактором.)

В любом случае, в итоге я избавился от большинства или всех этих привязок времени разработки и настроил все свои привязки во время выполнения. Проблема ушла на 99%. Это все еще иногда случается, но я не пытаюсь решить проблему.

И что бы вы ни делали, не наследуйте форму / элемент управления от базового базового класса. Это ломает это 100% времени. Если вам нужно сделать это, есть обходной путь, который вы можете найти с помощью быстрого поиска.

Microsoft почти наверняка никогда не исправит эти проблемы, поэтому привыкните к ним.

...