项目类型不允许添加新的"Web User Control"

Project type does not allow adding new "Web User Control"

我的 VS 和 C# 水平一般。我正在尝试将带有代码隐藏的 .ascx 文件添加到其用户控件中的现有项目。

右键单击用户控件 -> 添加 -> 新项并搜索 "web user control" returns "No items found."

复制粘贴一个现有的 .ascx 文件(有十几个)成功创建了新的 .ascx 文件,但是没有附加 .ascx.cs 或 .ascx.designer.cs 文件并且没有明显的添加它们的方法。

更多信息

复制"MyUserControl.ascx"确实是复制代码隐藏文件,但是它们被复制到原始"MyUserControl.ascx"文件下作为"MyUserControl - Copy.ascx.cs"和“"MyUserControl - Copy.ascx.designer.cs"。VS不允许这些要重命名或移动的文件。

因此,我从项目中删除了这些文件,在文件资源管理器中更改了它们的名称,将它们添加回项目并根据需要更新了代码。

但是,它们并未出现嵌套,而是与 .ascx 文件处于同一级别。

也试过

创建了一个空白的网络应用程序并可以将其添加到那里,因此它是特定于项目的。

尝试在文件资源管理器中复制后将文件添加为现有文件,目的是生成文件背后的代码 - 没有 转换为 Web 应用程序 选项,即使在选择解决方案时也是如此根据 How do you force Visual Studio to regenerate the .designer files for aspx/ascx files?

的建议,直接甚至在我的项目的 VS2015 项目菜单下

现在我已经发布赏金...

将项目(.ascx、.ascx.cs 和 .ascx.designer.cs 文件)添加到项目并更新其内容以反映所需更改后(代码隐藏属性,class 名称等),只需编辑项目的 .projitems 文件(我为此使用了记事本++,不确定它是否重要)。

您会发现两行看起来像这样 - 搜索您的文件名以轻松找到:

<Compile Include="$(MSBuildThisFileDirectory)MyPath\UserControls\MyUserControl.ascx.designer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)MyPath\UserControls\MyUserControl.ascx.cs" />

如果您有其他类似的文件,您会看到它们有一个依赖节点。添加此节点并在 VS 中重新加载将为您提供所需的内容:

<Compile Include="$(MSBuildThisFileDirectory)MyPath\UserControls\MyUserControl.ascx.cs" >
  <SubType>ASPXCodeBehind</SubType>
  <DependentUpon>MyUserControl.ascx</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)MyPath\UserControls\MyUserControl.ascx.designer.cs" >
  <DependentUpon>MyUserControl.ascx</DependentUpon>
</Compile>

听起来这里的主要问题是您无法使用 Visual Studio 添加 Web 窗体用户控制器,所以我会尝试解决这个问题。

我想这就是您正在寻找的内容,但这是我在添加新的 Web 窗体用户控件时所做的。我在解决方案资源管理器中右键单击,转到添加,然后单击 Web 窗体用户控件。

但是,我认为这对您不可用。因此,我要查看的下一个位置是在解决方案资源管理器中右键单击时选择 "New Item"。然后,在新的添加新项目对话框中,我将转到 Visual C# => Web => Web Forms User Control。

如果这两个都不是选项,那么我会检查您是否已将额外的 Web 组件安装到 Visual Studio 中。你好像没有说你使用的是哪个版本的 Visual Studio,所以我假设它是 Visual Studio 2017。打开你的 Visual Studio 2017 安装程序,然后单击修改按钮。选择 ASP.NET 和 Web 开发。这些组件应该为您提供模板选项。即使您不是在谈论 VS17,以前的 Visual Studio 安装程序也是相似的 - 修改您的安装并添加 Web 组件。

最后,特别是如果您在其他项目中有可用的选项,但在这个项目中没有,我碰巧知道 Visual Studio 会隐藏与您的项目类型不符的 options/templates。在您最喜欢的文本编辑器(显然是 NotePad++)中打开项目的 .csproj 文件,然后转到大约第 13 行,您应该在其中找到以分号分隔的 ProjectTypeGuids 列表。在下面的示例中,我有两个:349c5851-65df-11da-9384-00065b846f21 和 fae04ec0-301f-11d3-bf4b-00c04f79efbc。第一个代表 ASP.NET MVC 5。后者代表 C#。第一个 guid 是 Visual Studio 认为这是一个网络项目的原因。项目类型 guid 列表可用 here

我将我的项目从 VB 转换为 C#,它以某种方式将其视为 WinForm 项目。后来发现是.csproj文件中提到的ProjectTypeGuids决定了项目的类型

ASP.NET 5 {8BB2217D-0F2D-49D1-97BC-3654ED321F3B}

ASP.NETMVC 1 {603C0E0B-DB56-11DC-BE95-000D561079B0}

ASP.NETMVC 2 {F85E285D-A4E0-4152-9332-AB1D724D3325}

ASP.NETMVC 3 {E53F8FEA-EAE0-44A6-8774-FFD645390401}

ASP.NETMVC 4 {E3E379DF-F4C6-4180-9B81-6769533ABE47}

ASP.NETMVC 5 {349C5851-65DF-11DA-9384-00065B846F21}

C#{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

C++ {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}

数据库{A9ACE9BB-CECE-4E62-9AA4-C7E7C5BD2124}

数据库(其他项目类型){4F174C21-8C12-11D0-8340-0000F80270F8}

部署驾驶室{3EA9E505-35AC-4774-B492-AD1749C4943A}

部署合并模块{06A35CCD-C46D-44D5-987B-CF40FF872267}

部署设置{978C614F-708E-4E1A-B201-565925725DBA}

部署智能设备驾驶室{AB322303-2255-48EF-A496-5904EB18DA55}

分布式系统{F135691A-BF7E-435D-8960-F99683D2D49C}

AOT 中的 Dynamics 2012 AX C# {BF6F8E12-879D-49E7-ADF0-5503146B24B8}

F#{F2A71F9B-5D33-465A-A702-920D77279786}

J#{E6FDF86B-F3D1-11D4-8576-0002A516ECE8}

旧版 (2003) 智能设备 (C#) {20D4826A-C6FA-45DB-90F4-C717570B9F32}

旧版 (2003) 智能设备 (VB.NET) {CB4CE8C6-1BDB-4DC7-A4D3-65A1999772F8}

微框架{b69e3092-b931-443c-abe7-7e7b65f2a37f}

模型-视图-控制器 v2 (MVC 2) {F85E285D-A4E0-4152-9332-AB1D724D3325}

模型-视图-控制器 v3 (MVC 3) {E53F8FEA-EAE0-44A6-8774-FFD645390401}

模型-视图-控制器 v4 (MVC 4) {E3E379DF-F4C6-4180-9B81-6769533ABE47}

模型-视图-控制器 v5 (MVC 5) {349C5851-65DF-11DA-9384-00065B846F21}

单声道 Android {EFBA0AD7-5A72-4C68-AF49-83D382785DCF}

MonoTouch {6BC8ED88-2882-458C-8E55-DFD12B67127B}

MonoTouch 绑定 {F5B4F3BC-B597-4E2B-B552-EF5D8A32436F}

便携式Class库{786C830F-07A1-408B-BD7F-6EE04809D6DB}

项目文件夹 {66A26720-8FB5-11D2-AA7E-00C04F688DDE}

SharePoint(C#){593B0543-81F6-4436-BA1E-4747859CAAE2}

SharePoint (VB.NET) {EC05E597-79D4-47f3-ADA0-324C4F7C7484}

SharePoint 工作流 {F8810EC1-6754-47FC-A15F-DFABD2E3FA90}

银光{A1591282-1198-4647-A2B1-27E5FF5F6F3B}

智能设备(C#){4D628B5B-2FBC-4AA6-8C16-197242AEB884}

智能设备 (VB.NET) {68B1623D-7FB9-47D8-8664-7ECEA3297D4F}

解决方案文件夹 {2150E333-8FDC-42A3-9474-1A3956D46DE8}

测试{3AC096D0-A1C2-E12C-1390-A8335801FDAB}

通用WindowsClass库{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A}

VB.NET{F184B08F-C81C-45F6-A57F-5ABD9991F28F}

可视化数据库工具 {C252FEB5-A946-4202-B1D4-9916A0590387}

Visual Studio 2015 安装程序项目扩展 {54435603-DBB4-11D2-8724-00A0C9A8B90C}

Visual Studio 应用程序工具 (VSTA) {A860303F-1F3F-4691-B57E-529FC101A107}

Visual Studio Office 工具 (VSTO) {BAA0C2D2-18E2-41B9-852F-F413020CAA33}

Web 应用程序 {349C5851-65DF-11DA-9384-00065B846F21}

网站{E24C65DC-7377-472B-9ABA-BC803B73C61A}

Windows (C#) {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}

Windows (VB.NET) {F184B08F-C81C-45F6-A57F-5ABD9991F28F}

Windows (Visual C++) {8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}

Windows 通信基础 (WCF) {3D9AD99F-2412-4246-B90B-4EAA41C64699}

Windows Phone 8/8.1 Blank/Hub/Webview 应用 {76F1466A-8B6D-4E39-A767-685A06062A39}

Windows Phone 8/8.1 应用程序 (C#) {C089C8C0-30E0-4E22-80C0-CE093F111A43}

Windows Phone 8/8.1 应用程序 (VB.NET) {DB03555F-0C8B-43BE-9FF9-57896B3C5E56}

Windows 演示基础 (WPF) {60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}

Windows Store (Metro) 应用程序和组件 {BC8A1FFA-BEE3-4634-8014-F334798102B3}

工作流(C#){14822709-B5A1-4724-98CA-57A101D1B079}

工作流程(VB.NET){D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8}

工作流基础{32F31D43-81CC-4C15-9DE6-3FC5453562B6}

Xamarin.Android{EFBA0AD7-5A72-4C68-AF49-83D382785DCF}

Xamarin.iOS{6BC8ED88-2882-458C-8E55-DFD12B67127B}

XNA (Windows) {6D335F3A-9D43-41b4-9D22-F6F17C4BE596}

XNA (XBox) {2DF5C3F4-5A5F-47a9-8E94-23B4456F55E2}

XNA(Zune){D399B71A-8929-442a-A9AC-8BEC78BB2433}

详情请参考here

My mistake

我选错了以ascx结尾的文件(我以为这没什么区别)。你在图片中看到错误的项目:

My solution

我必须向下滚动到右侧的(Web 窗体用户控件)项才能添加它。看图中正确的项目: