项目类型不允许添加新的"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 窗体用户控件)项才能添加它。看图中正确的项目:
我的 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 窗体用户控件)项才能添加它。看图中正确的项目: