Подтвердить что ты не робот

Разделить старый .NET-код на конструкторский частичный класс

Я работаю над более старой базой данных .NET, в которой весь код разработчика добавлен в тот же файл кода, что и мой код (pre-partial classes).

Есть ли механизм, чтобы сообщить Visual Studio 2008 вернуться и код конструктора рефакторинга в файл частичного класса X.designer.cs?

4b9b3361

Ответ 1

То, что я только что сделал, было полностью вручную:

  • Создать yourform.Designer.cs
  • Добавьте его в Visual Studio (щелкните правой кнопкой мыши, добавьте существующий элемент)
  • Добавьте частичное ключевое слово в существующий класс.
  • Добавьте пространство имен точно так же, как в исходном cs, к yourform.designer.cs
  • Внутри этого пространства имен добавьте определение класса (не забудьте включить частичное ключевое слово). Не добавлять наследование и/или интерфейсы в этот неполный класс в Designer.cs.
  • После этого вы готовы вырезать и вставить следующее:

a) Удалите объект компонентов, который может быть у вас в исходной Winform. Если приложение было .NET 1.1, у вас будет что-то вроде этого:

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private Container components = null;

b) Добавить новый объект компонента в класс Designer:

    /// <summary>
    /// Required designer variable.
    /// </summary>
    private System.ComponentModel.IContainer components = null;

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

    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
    protected override void Dispose( bool disposing )
    {
        if ( disposing && ( components != null ) )
        {
            components.Dispose();
        }
        base.Dispose( disposing );
    }

d) Скопируйте все код внутри #областного конструктора форм Windows сгенерированный код в новый класс Designer.cs.

e) Вы также должны скопировать все переменные-члены для всех ваших объектов (метки, текс-боксы и т.д., которые вы используете в дизайнере).

Это должно быть все об этом. Сохраните и скомпилируйте.

Помните, что частичный класс можно разделить на N количество файлов, но все должны совместно использовать пространство имен SAME.

Стоит ли это? Ну, в моем случае у меня была куча огромных winforms с тоннами кода и элементов управления. VS2008 сканировал каждый раз, когда я переключался с/на дизайнера. Это сделало просмотр кода более отзывчивым. Я помню, что пришлось ждать 3-5 секунд, прежде чем иметь отзывчивый код. Теперь требуется 1...


UPDATE:

Выполнение шагов с 1 по 5 и перемещение существующего или добавления нового элемента управления не будут автоматически перемещать что-либо в класс designer.cs. Новые материалы идут в новый класс Designer, но старые вещи остаются там, где это было, к сожалению.

Вам также нужно закрыть и снова открыть файл (после добавления/создания частичного класса) для VS, чтобы правильно рисовать в Designer; неспособность сделать может привести к пустым формам, которые рисуются.

Ответ 2

Если кто-то все еще ищет автоматизированный метод для этого, там VS-макрос здесь, который сделает большую часть этого для вас.

Очень хороший инструмент.

Ответ 3

Чтобы объединить файл yourForm.designer.cs с вашимForm.cs, выполните следующие шаги

Измените .csproj в блокноте и добавьте следующий код

<Compile Include="yourForm.designer.cs">
    <DependentUpon>yourForm.cs</DependentUpon>
</Compile>

Ответ 4

Мне повезло со свободным автономным приложением DeCodEx (экстрактор кода дизайнера).

DeCodeEx загружается в проект Visual Studio, определяет, какие файлы являются WinForms, и автоматически разбивает код разработчика из исходного файла .cs или .vb в новый файл .designer.cs или .designer.vb.

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

Ответ 5

Является ли файл решения более старого кода .NET 2003/2005? Я попытался сделать то, о чем вы говорите, используя мастер преобразования в VS2008. Во время преобразования он должен попытаться проанализировать ваши .aspx-страницы и создать для них файлы дизайнеров. У генератора конструктора есть проблема в том, что эти более старые страницы .aspx настолько искажены, что их просто невозможно разобрать.

Я пришел к пониманию, что, возможно, попытка конвертировать старый код ASP.NET до 2.0 или 3.5 сама по себе станет крупным проектом. Я еще не нашел эффективный способ откорректировать код разработчика из старого существующего кода, поэтому я также с удовольствием узнаю о решении здесь.

Ответ 6

Если это WinForms - у меня есть PowerShell script, который редактирует проект и добавляет .designer.cs для всех форм/элементов управления.

Вам все равно придется перемещать код дизайнера вручную (или улучшать script). У меня было только несколько форм, и это не стоило усилий, чтобы добавить это тоже.

Я могу посмотреть его и опубликовать, если это поможет.

Ответ 7

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