C# 解决form的自定义partial 文件识别为 form的问题

62 阅读1分钟

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 属性, 不要依附.


  1. 在类文件中加入 其他类, 使 改文件, 不仅有一个类
partial class PartialClassNotForm
{
}
  1. 不能在.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
}