Respuesta resumida hasta el momento: los formularios y los controles solo se abren en el diseñador si existe el archivo csproj.user.
La historia del problema:
Tengo 2 controles que heredan de un control base. Sin embargo, a uno le falta el ícono de control en el explorador de soluciones. 
La buena fuente de control comienza con
public partial class UniTabMaterialsControl : UnitabBaseControl { public UniTabMaterialsControl() { InitializeComponent(); }La mala fuente de control comienza con
public partial class UniTabMaterialsControl : UnitabBaseControl { public UniTabMaterialsControl() { InitializeComponent(); }La clase de control base es
public class UnitabBaseControl : UserControl { }He intentado cerrar y volver a abrir Visual Studio
[Actualizar]
Agregué un nuevo control de usuario y lo configuré para heredar también de UnitabBaseControl, extrañamente se corrigió el comportamiento.
Luego pude eliminar el nuevo control y mantener el comportamiento correcto.
Git muestra que ha habido un cambio en UnitabBaseControl.cs pero no veo qué cambió aparte del color del texto de UserControl
Luego hice un clon nuevo de toda la solución. Esta vez el comportamiento incorrecto se mostró en todos los controles heredados de UnitabBaseControl.
[Actualizar]
Ahora sufro el mismo problema con los formularios.
using System.Windows.Forms; namespace SBD.VivSnap.UI { public partial class Form1 : Form { public Form1() { InitializeComponent(); } } }y
using System.Windows.Forms; namespace SBD.VivSnap.UI { public partial class Form2 : Form { public Form2() { InitializeComponent(); } } }[Actualizar]
Olvidé mencionar que mi proyecto era un proyecto de biblioteca al que se hace referencia en el proyecto de puesta en marcha.
Eliminé y luego volví a agregar la referencia del proyecto de la biblioteca en el proyecto de inicio. Entonces todos los formularios y controles aparecieron correctamente.
No pude encontrar ningún cambio en Git para indicar por qué la solución ahora funcionó.
Desde entonces he notado el problema en mi proyecto principal.
[Actualizar]
Resulta que mi proyecto está en formato .sdk a pesar de que es framework 4.7.2. Estoy pensando que esto puede tener algo que ver con eso.
Estoy usando Framework 4.7.2 con un proyecto SDK
Proyecto Sdk="Microsoft.NET.Sdk.WindowsDesktop"
Revisé el código en una computadora diferente que ejecuta VS2019 16.1.4 y funciona bien.
estoy usando 16.11.4
[Actualización] Ahora actualicé a 16.11.5 y volví a clonar, pero aún tengo el problema.
[Actualización] El archivo del proyecto es
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <TargetFramework>net472</TargetFramework> <OutputType>WinExe</OutputType> <AssemblyName>Main</AssemblyName> <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir> <RestorePackages>true</RestorePackages> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> <UseWindowsForms>true</UseWindowsForms> </PropertyGroup> <PropertyGroup> <StartupObject>SBD.VivSnap.Main.Program</StartupObject> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.CSharp" Version="4.7.0" /> <PackageReference Include="Microsoft.Data.SqlClient"> <Version>2.0.1</Version> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore"> <Version>3.1.12</Version> </PackageReference> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer"> <Version>3.1.12</Version> </PackageReference> <PackageReference Include="NuGet.Build.Tasks.Pack" Version="5.7.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\SnapInUI\SBD.VivSnap.UI.csproj" /> </ItemGroup> <ItemGroup> <Compile Update="Properties\Settings.Designer.cs"> <DesignTimeSharedInput>True</DesignTimeSharedInput> <AutoGen>True</AutoGen> <DependentUpon>Settings.settings</DependentUpon> </Compile> </ItemGroup> <ItemGroup> <None Update="Properties\Settings.settings"> <Generator>SettingsSingleFileGenerator</Generator> <LastGenOutput>Settings.Designer.cs</LastGenOutput> </None> </ItemGroup> </Project>El archivo csproj.user está en mi respuesta.
Resulta que los archivos csproj.user no estaban en el control de código fuente. Cuando copié myproject.csproj.user en la carpeta del proyecto y lo abrí en VS, los formularios aparecieron correctamente.
El contenido del archivo es
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup /> <ItemGroup> <Compile Update="Form1.cs"> <SubType>Form</SubType> </Compile> <Compile Update="Form2.cs"> <SubType>Form</SubType> </Compile> </ItemGroup> </Project>Esto me deja con el dilema de verificar o no csproj.user en el control de código fuente. Había pensado que esto no era necesario antes, pero parece que lo es. Además, el nombre "usuario" implicaría que es específico del usuario.
El tipo de compilación del formulario probablemente no esté configurado correctamente como "formulario" en el archivo .csproj. Abra el archivo .csproj y asegúrese de tener esta línea de código dondequiera que se mencione "form1.cs":
<Compile Include="form1.cs"> <SubType>Form</SubType> </Compile>