如何强制Visual Studio重新生成aspx/ascx文件的.designer文件?

Gle*_*ven 388 asp.net visual-studio-2008 visual-studio

有时当我正在编辑页面或控制时,.designer文件停止使用我正在页面上放置的新控件进行更新.我不确定是什么导致这种情况发生,但我想知道是否有任何方法迫使Visual Studio重新生成.designer文件.我正在使用Visual Studio 2008

编辑:对不起,我应该注意到我已经尝试过:

  • 关闭并重新打开所有文件和Visual Studio
  • 在页面上更改runat ="server"控件
  • 删除并重新添加页面指令

Esp*_*spo 364

如果打开.aspx文件并在设计视图和html视图之间切换,则会提示VS检查控件并将任何缺少的内容添加到设计器文件中.

在VS2013-15中," 项目"菜单下有" 转换为Web应用程序"命令.在VS2013之前,此选项在右侧单击上下文菜单中可用作(c/p)x文件.完成后,您应该会看到现在有一​​个*.Designer.cs文件,并且您可以使用Design HTML中的控件进行控制.

PS:这不应该在调试模式下完成,因为在调试时不会"重新编译"所有内容.

有些人还通过删除.designer.cs文件然后重新创建一个具有相同名称的空文件来报告成功.

  • VS2013在"项目"菜单下具有"转换为Web应用程序".不再在上下文菜单中. (43认同)
  • 我发现从调试模式更改为发布模式为我挖掘技巧,谢谢 (11认同)
  • 要显示"转换为Web应用程序",首先需要删除Designer.cs文件,右键单击解决方案资源管理器中的aspx文件并选择删除.这在VS 2010中对我有用. (10认同)
  • 只是想说我有同样的错误并尝试了这个页面上的所有内容,没有任何工作.原来我在runat ="server"的div上错过了一个">"关闭标记.运行VS-2008. (5认同)

Gle*_*ven 92

好吧,我找到了一个有效的解决方案,但我并不喜欢它.我不得不删除.designer.cs文件,然后重新创建一个具有相同名称的空文件.当我重新进入并再次保存aspx文件时,重新生成了设计器文件.

狡猾的!

  • 如果你有一个视图编译错误,它将不会回来.通常这就是为什么它首先停止regening.你需要打开视图编译才能看到它,这不是直截了当的. (9认同)
  • 这对我有用.我确保删除原始文件,创建一个具有相同名称的新designer.cs文件,关闭新文件,稍微修改.as(p/c)x文件以强制保存,然后一切都很好. (7认同)
  • 这对我也有用.不理想.不知道原始desginer文件为什么停止正确更新. (3认同)
  • 这不适合我.现在我有一个空文件,后面的所有代码都不起作用!重新启动... (3认同)

Ruv*_*ndo 79

我使用以下每次都有效的方法:

  • 在aspx/ascx文件的编辑器中选择所有前面代码(html标记等).
  • 切.
  • 保存.
  • 糊.
  • 保存.

重新编译.

  • 我认为只是删除一个控件并重新添加它具有相同的效果。 (2认同)

Geo*_*off 62

我最近看到我遇到了同样的问题.Visual Studio 2010拒绝更新设计器文件.

事实证明,VS不会修改使用CodeFile(运行页面)而不是CodeBehind(DLL)的页面的设计器文件.无论您关闭VS多少次,重新加载项目,重新创建控件或修改文件,都是如此.什么都不会促使VS重新设计设计师.就好像它没有为CodeFile页面创建设计器文件,但确实需要它在那里.

我将其更改为CodeBehind并保存页面.设计器文件立即更新.然后我就把它改回来了,一切都还是金色的.这种行为似乎是VS 2010/.NET 4.0的新特性,因为VS 2008默认情况下不会受此影响.

这是这部分:

<%@ Page Language="vb" AutoEventWireup="false" CodeFile="YourPage.aspx.vb" Inherits="YourPageClass" %>
Run Code Online (Sandbox Code Playgroud)

将CodeFile更改为CodeBehind,保存,然后还原.


y0m*_*mbo 37

还有另一种可能性:.aspx文件中可能存在错误,该错误不允许Visual Studio重新生成设计器.

如果切换到"设计视图",则会将控件显示为无法呈现.修复控件(在我的情况下,它是属性中的额外引用)并重新编译应重新生成设计器.


ATL*_*DEV 21

如果您运行的是Visual Studio 2013,可能还有2012年,那么大多数解决方案都不起作用.Microsoft可能会引入一些优化来使IDE变得更加快速,因此它们减少了触发代码生成器的案例数量.过去工作的以下方案不再适用:

  1. 删除aspx或ascx文件 - 不再检查此情况
  2. 剪切所有内容并重新编写到aspx或ascx文件中 - 不再有效,参考文献没有变化
  3. 转换为Web应用程序 - 选项不再可用
  4. 任意更改aspx/ascx文件中的内容 - 不再有效(参见2).

解决方案非常简单,但有点麻烦.为了触发代码生成器,请更改需要生成designer.aspx.cs的内容.更改不影响代码的内容(例如CSS样式或添加文本)将不会触发代码生成器.您必须更改引用的控件.这是怎么做的:

在ascx或aspx中更改控件的ID

<asp:HyperLink ID="MyLink" runat="server" NavigateUrl="~/Default.aspx" Text="Home" />
Run Code Online (Sandbox Code Playgroud)

<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />
Run Code Online (Sandbox Code Playgroud)

转到ascx.cs或aspx.cs并确保将所有对"MyLink"的引用重命名为"theLINK".保存并做好构建,你应该好好去.

  • 3.如果选择了适当的文件,则"PROJECT"菜单中将显示"转换为Web应用程序". (8认同)
  • 嗯.不幸的是,如果它已经是一个Web应用程序,则此选项不可用. (2认同)

Dev*_*ris 14

我知道的唯一方法是删除设计器文件,然后转换为Web应用程序.但是当你这样做时,它通常会弹出错误,为什么它首先不会自动重新生成,它通常是一个未在页面头部声明的控件引用.


小智 9

转换为Web应用程序对我不起作用.

删除designer.cs并粘贴一个空白的designer.cs也不起作用.

但是这是有效的:

  1. 全选(Default.aspx)
  2. 保存Default.aspx
  3. 保存Default.aspx

完成.生成了新的designer.cs.:)


Ove*_*lew 6

我经常发现复制/粘贴给我带来了这种行为.大多数情况可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后删除它).

还要记住,在设计器文件中看不到像Repeater这样的内容.

是的,有些情况下您需要执行上面列出的删除文件魔法 - 但名称更改解决方案大部分时间都可以使用.

  • 那是我多次犯的那种错误.如果将HTML从一个页面复制到另一个页面并使用runat ="server"控件,则将重命名控件以避免冲突.但是,如果您在"html comment"标签<! - whaterver - >中粘贴,则不会更改控件ID,并且任何冲突都将停止重新生成设计器文件,因为有两个具有相同ID的控件.这是因为还创建了html"comments"标签内的控件.;) (2认同)

End*_*ssa 5

(以下内容来自VS2005的经验。)

如果您在调试时编辑 ASPX 页面,则隐藏代码不会使用新类进行更新。因此,您必须停止调试,简单地编辑 ASPX 页面(例如添加按钮或其他内容),然后单击“设计视图”,然后删除该按钮。然后,您的设计器文件应该更新。

如果您在使用 VS2008 时遇到其他问题,那么我无能为力。


Joh*_*ino 5

我的经验是,如果你想在做类似这样的文章,如上述。

您的标记文件(aspx / ascx)必须包含CodeBehind =“ MyPage.aspx.cs”属性,否则它将不起作用。我在这里写了博客。

  • +1已为我修复。我的页面缺少此属性 (2认同)

小智 5

我找到了一种解决这个问题的方法,无需更改任何代码或运行"转换为Web应用程序"等命令 - 而且它也很简单!

我发现重新启动Visual Studio通常可以解决问题,但有时却没有.在这些情况下,如果您关闭Visual Studio,然后再次打开它之前删除Web项目的"obj"目录中的所有内容,它始终对我有用.

(再次启动时,只需添加一个空格并再次将其删除,然后单击"保存"以正确重新生成设计器文件)