vs2019 运行 框架 4.7.2 的 SDK 项目中缺少图标和视图设计器选项的控件和表单
controls and forms missing icon and view designer option in vs2019 running SDK project with framework 4.7.2
到目前为止的简要回答:只有 csproj.user 文件存在时,表单和控件才会在设计器中打开。
问题故事:
我有 2 个控件,它们都继承自一个基本控件。
但是,解决方案资源管理器中缺少控件图标
好的控制源开始于
public partial class UniTabMaterialsControl : UnitabBaseControl
{
public UniTabMaterialsControl()
{
InitializeComponent();
}
错误的控制源以
开头
public partial class UniTabMaterialsControl : UnitabBaseControl
{
public UniTabMaterialsControl()
{
InitializeComponent();
}
基地控制class是
public class UnitabBaseControl : UserControl
{
}
我试过关闭并重新打开Visual Studio
[更新]
我添加了一个新的用户控件并将其设置为也继承自 UnitabBaseControl ,奇怪的是行为得到了纠正。
然后我能够删除新控件并保持正确的行为
Git 显示 UnitabBaseControl.cs 发生了变化,但除了 UserControl 文本的颜色
之外,我看不到有什么变化
然后我重新克隆了整个解决方案。
这次不正确的行为显示在所有继承自 UnitabBaseControl
的控件上
[更新]
现在我遇到了同样的表单问题
using System.Windows.Forms;
namespace SBD.VivSnap.UI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
和
using System.Windows.Forms;
namespace SBD.VivSnap.UI
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
}
}
[更新]
我忘了说我的项目是启动项目引用的库项目。
我在启动项目中删除并重新添加了库项目引用。然后所有的窗体和控件都正确出现了。
我在 Git 中找不到任何更改来说明解决方案现在有效的原因。
从那时起我就注意到了我的主项目中的问题
[更新]
原来我的项目是.sdk格式的,虽然是framework 4.7.2
我想这可能与它有关。
我正在使用
项目 Sdk="Microsoft.NET.Sdk.WindowsDesktop"
我将代码检出到另一台计算机上 运行 VS2019 16.1.4,它构建正常。
我正在使用 16.11.4
[更新]
现在我已经更新到16.11.5并再次克隆,但仍然有问题。
[更新]
项目文件是
<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>
csproj.user 文件在我的回答中。
表单的编译类型可能未在 .csproj 文件中正确设置为“表单”。
打开 .csproj 文件并确保在提到“form1.cs”的任何地方都有这行代码:
<Compile Include="form1.cs">
<SubType>Form</SubType>
</Compile>
事实证明 csproj.user 文件不在源代码管理中。
当我将 myproject.csproj.user 复制到项目文件夹并在 VS 中打开时,表格正确显示。
文件内容为
<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>
这让我左右为难,是否要将 csproj.user 检查到源代码管理中。我以前认为这是没有必要的,但现在看来是这样。加上名称“用户”将暗示它是特定于用户的。
到目前为止的简要回答:只有 csproj.user 文件存在时,表单和控件才会在设计器中打开。
问题故事:
我有 2 个控件,它们都继承自一个基本控件。
但是,解决方案资源管理器中缺少控件图标
好的控制源开始于
public partial class UniTabMaterialsControl : UnitabBaseControl
{
public UniTabMaterialsControl()
{
InitializeComponent();
}
错误的控制源以
开头public partial class UniTabMaterialsControl : UnitabBaseControl
{
public UniTabMaterialsControl()
{
InitializeComponent();
}
基地控制class是
public class UnitabBaseControl : UserControl
{
}
我试过关闭并重新打开Visual Studio
[更新]
我添加了一个新的用户控件并将其设置为也继承自 UnitabBaseControl ,奇怪的是行为得到了纠正。
然后我能够删除新控件并保持正确的行为
Git 显示 UnitabBaseControl.cs 发生了变化,但除了 UserControl 文本的颜色
之外,我看不到有什么变化然后我重新克隆了整个解决方案。 这次不正确的行为显示在所有继承自 UnitabBaseControl
的控件上[更新]
现在我遇到了同样的表单问题
using System.Windows.Forms;
namespace SBD.VivSnap.UI
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
和
using System.Windows.Forms;
namespace SBD.VivSnap.UI
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
}
}
[更新]
我忘了说我的项目是启动项目引用的库项目。
我在启动项目中删除并重新添加了库项目引用。然后所有的窗体和控件都正确出现了。
我在 Git 中找不到任何更改来说明解决方案现在有效的原因。
从那时起我就注意到了我的主项目中的问题
[更新]
原来我的项目是.sdk格式的,虽然是framework 4.7.2 我想这可能与它有关。
我正在使用
项目 Sdk="Microsoft.NET.Sdk.WindowsDesktop"
我将代码检出到另一台计算机上 运行 VS2019 16.1.4,它构建正常。
我正在使用 16.11.4
[更新] 现在我已经更新到16.11.5并再次克隆,但仍然有问题。
[更新] 项目文件是
<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>
csproj.user 文件在我的回答中。
表单的编译类型可能未在 .csproj 文件中正确设置为“表单”。 打开 .csproj 文件并确保在提到“form1.cs”的任何地方都有这行代码:
<Compile Include="form1.cs">
<SubType>Form</SubType>
</Compile>
事实证明 csproj.user 文件不在源代码管理中。 当我将 myproject.csproj.user 复制到项目文件夹并在 VS 中打开时,表格正确显示。
文件内容为
<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>
这让我左右为难,是否要将 csproj.user 检查到源代码管理中。我以前认为这是没有必要的,但现在看来是这样。加上名称“用户”将暗示它是特定于用户的。