C# 解决form的自定义partial 文件识别为 form的问题
问题描述
在Visual Studio 2022中, form类文件的 分文件, 会被识别为form窗体, 并自动在项目中添加<SubType>Form</SubType>
的标记, 导致编辑器崩溃.
如果设置了 DependentUpon 属性, 更是强制识别为窗体文件, 导致编辑器程序崩溃. 多次删除, 或者更改文件名都不能防止此 烦人的动作.
思考
1. 为什么会识别自定义partial 文件为窗体文件 ?
- 因为该partial文件中 只有一个类, 且该类还是继承自 Form类. 被Visual Studio 自动识别为 单类声明的窗体文件.
解决办法, 在该文件中添加一些 无关的类. 如空类 PartialClassNotForm
2. 为什么 在该分文件中添加一些 无关的类后, 打开 Form1.cs后, PartialClassNotForm
会被强制 改名为 Form1
, 导致编辑器崩溃?
- 因为设置了
DependentUpon
属性, 该属性下的类 必须是 窗体本类Form1
.
解决办法, 删除 DependentUpon
属性, 不要依附.
- 在类文件中加入 其他类, 使 改文件, 不仅有一个类
partial class PartialClassNotForm
{
}
- 不能在.csproj 文件中设置
<Compile Include="Controls\Form1.partial1.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
否则也会自动识别为窗体文件, 如果有, 就有删掉这个属性
正确的做法
<Compile Include="Controls\Form1.partial1.cs" />
完整实例
<Compile Include="Controls\Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Controls\Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Controls\Form1.partial1.cs" />
<Compile Include="Controls\Form1.partial2.cs" />
<Compile Include="Controls\Form1.partial3.cs" />
// Form1.partial1.cs
namespace App1;
partial class PartialClassNotForm
{
}
partial class Form1
{
// ... some code
}
// Form1.partial2.cs
namespace App1;
partial class PartialClassNotForm
{
}
partial class Form1
{
// ... some code
}
// Form1.partial3.cs
namespace App1;
partial class PartialClassNotForm
{
}
partial class Form1
{
// ... some code
}