我正在开发一个较旧的.NET代码库,其中所有设计器代码都填充到与我的代码相同的代码文件中(预部分类)。
是否有一种机制告诉Visual Studio 2008返回并将设计器代码重构为X.designer.cs分部类文件?
答案 0 :(得分:35)
我刚刚完成的是手动完成:
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等)复制所有成员变量。
这应该是关于它的全部。保存并编译。
值得吗? 好吧,在我的情况下,我有一堆巨大的 winforms,有大量的代码和控件。每次我从设计师切换到设计师时,VS2008都会爬行。这使代码视图更具响应性。我记得在有响应代码之前必须等待3-5秒。现在需要1 ...
执行步骤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文件中并不会让我感到惊讶。