最近反编译了别人的Winform项目,导出后项目可以编译,但是无法设计界面,于是有了下面的艰辛历程。
首先,设计器里面的内容会和主要的cs进行合并,因为用了partial关键字声明类型。
我们需要新建一个同类名的以.Designer.cs结尾的文件,类似以下:
- namespace 命名空间
- {
- partial class 类名
- {
- private System.ComponentModel.IContainer components = null;
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
- private void InitializeComponent()
- {
- //控件初始化内容,给设计器使用的
- }
-
- //控件声明位置
- }
复制代码
然后把原来类里面对应的内容复制到InitializeComponent()函数下,主要声明放到控件声明位置(仿照winform窗口类的结构)。
然后把类名.cs下面同名的components 声明和Dispose(bool disposing)、 InitializeComponent()删除即可。
接下来就是打开工程文件.csproj文件,按照格式添加新加或者改动文件进去,例如我这里的MainForm函数。
需要说明的是:不管Include字段中的文件是否在多个文件夹下或路径是否很长,必须写完整;
而DependentUpon字段则直接写最后文件名即可(不带多层文件夹完整路径)。
- <Compile Include="MainForm.cs">
- <SubType>Form</SubType>
- </Compile>
- <Compile Include="MainForm.Designer.cs">
- <DependentUpon>MainForm.cs</DependentUpon>
- </Compile>
- <EmbeddedResource Include="MainForm.resx">
- <DependentUpon>MainForm.cs</DependentUpon>
- <SubType>Designer</SubType>
- </EmbeddedResource>
复制代码
第二步,把partial关键字放到原来类名.cs文件名类型定义前面即可。
第三步,原则上应该可以正常用,但是双击类名.cs设计器打开界面提示错误。
https://stackoverflow.com/questi ... -f?answertab=active
怎么解决呢?就是把InitializeComponent()函数中带有nameof(类型)的改成字符串类型名即可
- this.Name = nameof(MainForm);
复制代码 改成成功解决。 |