将旧的.NET代码拆分为设计器的部分类

时间:2009-03-21 16:16:53

标签: .net visual-studio

我正在开发一个较旧的.NET代码库,其中所有设计器代码都填充到与我的代码相同的代码文件中(预部分类)。

是否有一种机制告诉Visual Studio 2008返回并将设计器代码重构为X.designer.cs分部类文件?

7 个答案:

答案 0 :(得分:35)

我刚刚完成的是手动完成:

  1. 创建 yourform .Designer.cs
  2. 将其添加到Visual Studio(右键单击,添加现有项目)
  3. 部分关键字添加到现有类中。
  4. 名称空间 与原始cs 完全相同,添加到 yourform .designer.cs
  5. 在此命名空间内,添加定义(不要忘记包含部分关键字)。 不要在Designer.cs中为此分部类添加继承和/或接口。
  6. 完成此操作后,您就可以剪切粘贴以下内容:
  7. a)删除原始Winform中可能包含的组件对象。如果应用程序是.NET 1.1,您将得到以下内容:

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

    b)在Designer类中添加一个新的 components 对象:

        /// <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)将 #region Windows窗体设计器生成的代码中的代码全部复制到新的Designer.cs类。

    e)您还应该为所有对象(您在设计器中使用的标签,texbox等)复制所有成员变量。

    这应该是关于它的全部。保存并编译。

    请记住,部分类可以在N个文件中分割,但所有文件都必须共享SAME名称空间。

    值得吗? 好吧,在我的情况下,我有一堆巨大的 winforms,有大量的代码和控件。每次我从设计师切换到设计师时,VS2008都会爬行。这使代码视图更具响应性。我记得在有响应代码之前必须等待3-5秒。现在需要1 ...


    UPDATE:

    执行步骤1到5并移动现有控件或添加新控件不会自动将任何内容移动到designer.cs类。 新的东西进入了新的Designer类,但不幸的是旧的东西仍然存在。

    您还必须关闭并重新打开文件(在添加/创建分部类之后),以便VS在Designer中正确绘制;如果不这样做,可能会导致抽出空表。

答案 1 :(得分:8)

如果有人还在寻找一种自动执行此操作的方法,那么VS宏here将为您完成大部分工作。

一个非常好的工具。

答案 2 :(得分:3)

要将yourForm.designer.cs合并到yourForm.cs,请执行以下步骤

在记事本中修改.csproj并添加以下代码

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

答案 3 :(得分:2)

我对免费的独立应用程序DeCodEx(Designer Code Extractor)运气不错。

DeCodeEx在Visual Studio项目中加载,检测哪些文件是WinForms,并自动将原始.cs.vb文件中的设计器代码拆分为新的.designer.cs或{{1文件。

对于大型项目,它比尝试自己手动拆分文件容易得多。

答案 4 :(得分:1)

旧版.NET代码2003/2005的解决方案文件是什么?我试过通过使用VS2008中的转换向导来做你正在谈论的事情。在转换过程中,它应该尝试解析.aspx页面并为它们构建设计器文件。设计器生成器遇到的问题是这些较旧的.aspx页面格式错误,无法解析它们。

我已经意识到,尝试将旧的ASP.NET代码转换为2.0或3.5本身就是一个大型项目。我还没有找到一种从旧的现有代码中分解设计器代码的有效方法,所以我也很乐意在这里学习一个解决方案。

答案 5 :(得分:0)

如果是WinForms - 我有一个编辑项目的PowerShell脚本,并为所有表单/控件添加.designer.cs。

你仍然需要亲自移动设计师代码(或改进脚本) - 我只有一些表格,并且不值得努力添加它。

我可以查阅并发布,如果这会有所帮助。

答案 6 :(得分:0)

如果您在设计师中打开其中一个表单并保存,我会很高兴看到会发生什么。或修改并保存;或者在创建只包含部分类的空shell的.designer.cs文件之后执行上述操作之一。找到设计师至少将更改放入.designer.cs文件中并不会让我感到惊讶。