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


395

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

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

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

57
荒谬的是,在2012年,Visual Studio仍然没有上下文菜单项可以从源文件重新生成设计器文件吗?这类似于无法重建损坏的DLL。我不明白。特别是在使用外部源代码控制和外部编辑器的情况下,Visual Studio会瘫痪。如果你问我,那是浪费钱。我实际上是在尝试重新生成资源文件设计器。我设法编辑它再生,但它是通过隐藏... Augh !!! 1
bambams

3
@bamccaig,如果我像这样的每个怪异“功能”都花一分钱,我会比盖茨更富有。如果您认为这样做不好,请查看Outlook Express在何处存储其邮件数据。它被隐藏在用户文件夹的深处,默认情况下是隐藏的隐秘文件夹名称。
ATL_DEV 2014年

13
VS 2015有什么解决方案吗?
安东2015年

有关其他尝试,请参阅相关的stackoverflow.com/questions/6508252/…
21:08 goodeye

2
不是永久性的修复程序,但这会还原.cs文件中的控件引用:1.打开相关的.aspx文件;2.删除<%@ Page指令行末尾的单个“>” ;3.等待一两秒钟;4.放回“>”。5.切换到.cs文件,您将看到它现在没有控件参考错误。我这样做已经很久了,在每个VS版本中都可以使用。
Ingredient_15939'3

Answers:


368

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

在VS2013-15中,“ 项目”菜单下有一个“ 转换为Web应用程序”命令。在VS2013之前,此选项在右键单击上下文菜单中可用于as(c / p)x文件。完成此操作后,您应该会看到* .Designer.cs文件现在可用,并且Design HTML中的控件将可用于您的控件。

PS:不应在调试模式下完成此操作,因为在调试时并非所有内容都被“重新编译”。

有人还报告了成功的方法(删除.designer.cs文件的备份副本,然后删除).designer.cs文件。重新创建一个具有相同名称的空文件。

此答案有很多注释,它们添加了有关如何最好地重新创建designer.cs文件的提示。


1
这仅在关闭VS2008的每个实例(甚至是完全不同解决方案的实例)后才对我有用
凯文2010年

11
我发现从调试模式更改为发布模式对我来说很重要,谢谢
克里斯(Chris

5
只是想说我遇到相同的错误,并尝试了此页面上的所有内容,但没有任何效果。原来,我在具有runat =“ server”的div上缺少一个“>”关闭标签。运行VS-2008。
Ber53rker 2012年

10
要显示“转换为Web应用程序”,首先需要通过在解决方案资源管理器中右键单击aspx文件并选择“删除”来删除Designer.cs文件。这为我工作在VS 2010
DeveloperDan

43
VS2013在“项目”菜单下具有“转换为Web应用程序”。只是不再在上下文菜单中。
丹尼斯·伯顿

95

好吧,我找到了一个可行的解决方案,尽管我不太喜欢它。我必须删除.designer.cs文件,然后重新创建一个具有相同名称的空文件。当我返回并再次保存aspx文件时,重新生成了设计器文件。

狡猾!


3
这也对我有用。不理想。不知道为什么原始desginer文件停止正确更新。
伊恩·霍尔德

3
这对我不起作用。现在我有一个空文件,并且所有后面的代码都无法正常工作!!!正在重新启动...
DiningPhilanderer

7
这对我有用。我确保删除原始文件,使用相同的名称创建一个新的designer.cs文件,关闭新文件,稍微修改.as(p / c)x文件以强制保存,然后一切都很好。
TJB

9
如果您有视图编译错误,它将不会再出现。通常,这就是为什么它首先停止再生。您需要打开视图编译才能看到它,这不是直截了当的。
DevelopingChris

1
我还必须在项目中包含空文件。
JP Hellemons,

78

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

  • 在aspx / ascx文件的编辑器中选择所有的前端代码(html标记等)。
  • 切。
  • 救。
  • 糊。
  • 救。

重新编译。


1
我认为仅删除单个控件并重新添加它具有相同的效果。
克里斯,

我做到了,它为我工作。但是,我必须创建一个空文件<name>.aspx.designer.vb才能正常工作
Tahir Hassan

64

我最近发现自己遇到了同样的问题。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" %>

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


迟到此线程。上述答案均未要求控件在* .aspx.designer.cs中列出。我希望这可以,但是它仍然不会强制在* .aspx.designer.cs文件中声明控件。我正在使用VS 2010 Pro SP1。我正在尝试使其与IDE在/ Account中生成的任何默认文件(如ChangePassword.aspx)一起使用。谢谢。
paparush

1
我的设置为CodeFile,我更改为CodeBehind,保存,回到CodeFile,保存,一切都变得很黄金。以前的修复尝试对我而言并非如此。VS 2010专业版

37

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

如果切换到“设计视图”,它将显示控件无法渲染。修复控件(在我的情况下,这是属性中的多余引号),然后重新编译应重新生成设计器。


我有同样的问题,用户控件有错误,因此由于用户控件中的错误,使用用户控件的页面有不相关的错误。
罗南·费斯汀格

1
相同的原因。我向ASP按钮添加了不受支持的属性visible =“ false”。我删除了它,并重新生成了设计器代码。
chingNotCHing

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" />

<asp:HyperLink ID="theLINK" runat="server" NavigateUrl="~/Default.aspx" CssClass="tab" Text="Home" />

转到ascx.cs或aspx.cs,并确保将所有对“ MyLink”的引用也重命名为“ theLINK”。保存并进行构建,您应该会很好。


关于新版本Visual Studio中的更改的要点。对我有用,而不是像上面那样弄乱ID,是清除设计器文件,然后添加一个全新的良性控件,例如<asp:PlaceHolder ID =“ Foo” runat =“ server />,然后保存以触发–即使您忘记将其删除,也不会受到任何影响
Jordan Rieger 2014年

8
3.如果选择了适当的文件,则在“项目”菜单中可以使用“转换为Web应用程序”。
WynandB 2014年

2
嗯 不幸的是,如果该选项已经是一个Web应用程序,则该选项不可用。
ATL_DEV 2014年

快速更改是编辑Inherits =属性的名称空间部分。这应该在.designer文件中编辑名称空间,并重新生成其中的所有内容。我刚刚在VS2013.3。
David Russell

嗨,我通常会尝试使用您提供的方式,但是问题是另一个用户无法生成g.cs文件,而只有管理员能够执行。我们正在使用TFS,在VS中使用多个开发人员用户ID,我们能够生成g.cs。在服务器,TFS和SP上生成g.cs有哪些权利?
nirav 2015年

14

我知道的唯一方法是删除设计器文件,然后执行转换为Web应用程序。但是,当您执行此操作时,通常会弹出错误提示,说明为什么它首先没有自动重新生成,通常是页面顶部未声明的控件引用。


抱歉,它不起作用,自从我开始使用它以来,它就在VS 2008中为我工作。您的页面中是否存在语法错误?您应该得到一个对话框,告诉您要解决的问题才能完成工作。
DevelopingChris

这对我有用。代码隐藏类的int Id属性可以区分大小写,因此可以在C#中很好地编译。但是ID="ControlName"在aspx页面中却试图这样做Id = "ControlName"Convert to Web App说些像ControlName cannot be converted to Int32
纳尔逊·罗瑟梅尔

9

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

删除designer.cs并粘贴空白designer.cs也不起作用。

但是是的,这可行:

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

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


我可以确认这在VS2013中有效,我做到了,它解决了我的问题。
ToastyMallows 2014年

您。有。得到了。至。是。开玩笑的。我。这在VS2015中对我有用,但在选择的答案中没有进行转换时。
GraehamF

6

我经常发现复制/粘贴对我造成了这种现象。大多数情况下,可以通过编辑服务器控件的ID来解决(只需添加一个字符,然后将其删除)。

还要记住,在设计器文件中看不到诸如Repeaters之类的控件。

是的,在某些情况下,您需要执行上面列出的删除文件的操作-但名称更改解决方案在大多数情况下都可以使用。


2
那是我多次犯的错误。如果将HTML从一页复制到另一页,并具有带有runat =“ server”的控件,则将重命名控件以避免冲突。但是,如果将“ html注释”标签粘贴到<!-whatverver->中,则控件ID不会更改,并且任何冲突都将阻止重新生成设计器文件,因为存在两个具有相同ID的控件。这是因为还创建了html“ comments”标记内的控件。;)
tomasofen

5

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

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


添加此属性,然后保存;没有。然后删除Inherits,保存,还原,然后更新设计器代码文件!这个令人讨厌的功能每次都会抓住我:-(
GlennG

两个链接都死了=(
Maslow 2014年

5

我已经找到了解决此问题的方法,而无需更改任何代码或运行诸如“转换为Web应用程序”之类的命令-这也很简单!

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

(当再次开始时,您只需添加一个空格并再次删除它,然后单击保存以正确重新生成设计器文件)


我一直在负责支持的旧版应用程序中遇到此问题。我要说谢谢您指出这一点。我不允许转换成Web应用程序”,创建一个新的解决方案,或做任何事情,但解决一些设计师将崩溃,不断对我来说不过这至今已经协助。
杰米·泰勒

4

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

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

如果您在VS2008上遇到其他问题,那么我无济于事。


在VS.Net 2010中跑到这个...必须要做到这一点...谢谢@EndangeredMassa的提示...我以前也在VS.Net 2002/2003的日子里经历过这个...希望我然后知道这一点;)
理查德·B

4

在设计视图中时,右键单击屏幕,然后单击刷新。


3

起作用的另一件事是-

  1. 手动删除然后在文件系统中创建设计器文件。
  2. 编辑项目文件。
  3. 添加代码以包括设计师
    Eg:<Compile Include="<Path>\FileName.ascx.designer.cs"> <DependentUpon>FileName.ascx</DependentUpon> </Compile>
  4. 重新载入专案
  5. 在设计/查看模式下以(c / p)x文件格式打开并保存。
  6. 检查设计器文件。代码将在那里。

3

如果您使用的是VS2013或更高版本,请确保使用属性“ CodeBehind”而非“ CodeFile”引用的代码,然后执行以下步骤

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="yourControl.ascx.cs" Inherits="yourControl.yourControl" %>
  • 创建一个空的设计器页面(或者如果它已经存在,则清除它“ yourControl.ascx.designer.cs”)
  • 在ascx(或aspx)中复制所有代码,将其删除,然后保存。再次重新粘贴,然后保存。
  • 现在应该填充设计器文件。

2
  • 在设计器文件中全选,然后删除文件中的所有内容,将其保留为空白,然后保存
  • 全选ASPX / ASCX文件并剪切所有内容,然后将其重新粘贴回去
  • 设计器文件应已重新生成代码

1
这对我有用!删除所有内容后,我还保存了.aspx文件。重新粘贴,保存并完全填充了我的(以前为空白)设计器文件。
DaveD

2

这是我的经验,请在解决方案资源管理器中右键单击网站文件夹,为将生成设计器文件的所有aspx文件选择“转换为Web应用程序”。

沙美尔


2

只是为了在此处添加一长串答案-我刚刚在VS2010(SP1)中使用.aspx文件遇到了此问题。我尝试添加和删除标准ASP控件(在过去有效),但最后,我不得不从现有控件中删除runat = server行之一(并保存),以强制重新生成设计器文件。


2

多年来,我在Visual Studio 2008中工作时遇到了相同的问题。我已经尝试了StackOverflow上的每个“解决方案”以及数十个博客,就像我确定你们所有人一样。有时它们起作用,有时却不起作用,就像我确定你们所有人都遇到过一样。显然,这在VS2010和VS2012中仍然是一个问题。

因此,终于在几个月前,我决定足够了,并在几周内构建了一个名为“ Redesigner”的工具,该工具生成.designer文件。它是BSD许可下的开源软件,其源代码可在SourceForge上获得-免费使用,免费窃取,免费执行您喜欢的任何事情。它可以做Visual Studio经常做不到的事情,它可以快速可靠地生成.designer文件。

它是一个独立的命令行工具,可以解析.aspx和.ascx文件,执行所有必需的反射魔术,并吐出正确的.designer文件。它自己执行所有解析和反射操作,以避免依赖现有代码,众所周知,现有代码已损坏。它是用C#针对.NET 3.5编写的,但要避免甚至将System.Web用于类型声明以外的其他事情也很费力,并且它根本不使用也不依赖Visual Studio

重新设计器可以生成新的.designer文件。并且它提供了--verbose选项,以便在出现问题时,比“引发System.Exception类型的异常”得到更好的错误消息。还有一个--verify选项,可用来告诉您现有的.designer文件何时损坏—缺少控件,错误的属性声明,Visual Studio无法读取,或者其他原因。

我们已经在我的工作场所使用它,以便在上个月的大部分时间里摆脱困境,尽管Redesigner仍然是Beta版,但它的作用已经远远超过了它,值得与公众分享它的存在。我很快打算为其创建一个Visual Studio插件,因此您只需右键单击即可以您一直希望的方式来验证或重新生成设计器文件。但是在此期间,命令行用法非常简单,并且可以省去很多麻烦。

无论如何,现在就去下载Redesigner的副本,然后停止拔头发。您将不会总是需要它,但是当您这样做时,就会很高兴拥有它!

https://sourceforge.net/projects/redesigner/


看起来像是简单修复的
Chris McGrath 2013年

1
@ChrisMcGrath可能有些过分,但是我感到了促使使用此工具的痛苦。我很佩服他投入的时间来建造它:)
Jordan Rieger 2014年

2

TL; DR;
编辑InheritsASPX页面@Page指令的属性,然后单击“保存”。您的设计器文件应重新生成。

确保Inherits= <名称空间>。<类名称>和CodeBehind= <类名称> .aspx.cs


我正在尝试使用VS 2010和TFSSharepoint 2010项目上执行此操作,但上述任何解决方案都不适合我。首先,在VS 2010中使用TFS时,.ASPX文件的右键单击菜单中缺少“转换为Web应用程序”选项。

这个答案终于有所帮助。我的课看起来像这样:

namespace MyProjects.Finance.Pages
{
    public partial class FinanceSubmission : WebPartPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        // more code
    }
}

我的@Page指令是(为了清楚起见,在这里使用换行符):

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="FinanceSubmission.aspx.cs"
    Inherits="MyProjects.Finance.Pages.FinanceSubmission"
    MasterPageFile="~masterurl/default.master" %>

我第一次改变了InheritsMyProjects.Finance.Pages,点击保存,然后改回了MyProjects.Finance.Pages.FinanceSubmission并再次命中保存。哇!设计器页面已重新生成!

希望这对使用TFS的人有所帮助!


2

在Visual Studio中:

1)删除您的aspx.designer.cs文件

2)右键单击您的aspx文件,然后选择“转换为Web应用程序”。这应将aspx.designer.cs重新添加并保持最新状态。

如果收到错误消息:

“生成设计器文件失败:方法或操作未实现。”

尝试关闭Visual Studio,然后重新打开您的项目,然后再次执行第二步

如何在Visual Studio中生成aspx.designer.cs?


2
aspx文件的上下文菜单上不存在“转换为Web应用程序”。至少在VS Professional 2015中没有
Chris Walsh

2
  1. 步骤1:选择所有的aspx代码,剪切[CTRL + X]该代码并保存。

  2. 步骤2:再次将相同的代码粘贴到同一页面中,然后再次保存

现在,您的.desinger页面将刷新.aspx页面中的所有控件。


1

删除designer.cs文件,然后右键单击.aspx文件,然后选择“转换为Web应用程序”。如果控件声明存在问题,例如标签格式不正确,则会收到错误消息,并且您需要更正格式错误的标签,然后Visual Studio才能成功重新生成设计器文件。

就我而言,此时,我发现问题是我声明了一个按钮控件,该控件不在带有runat =“ server”属性的表单标记内。


1

这是IDE中的错误;从VS 2003开始,我就已经看到它了。但是,解决方案很简单。

保存文件。完全退出IDE(确保过程停止,任务mgr。)

重新打开解决方案,标记变脏,保存。固定。



1

我有一个问题,当在.ascx文件中声明时,新控件不会在设计器文件中生成。问题是我也在后面的代码中声明了它们。因此,删除后面代码中的声明解决了我的问题。


1

如果您像我一样,并且将旧的.ASPX文件添加到更新的项目中。您可能会忘记页面上使用的某些控件。

如果是这样,首先,如果要安装多个文件;首先一次修复一个。

编译时,修复生成的错误。它们可能在所有文件中都是相同的错误。

接下来,如果您具有Designer文件,请删除所有插入的Designer文件。接下来,确保在编译时除设计器文件外没有其他错误。

最后,右键单击您的Web项目,然后单击“转换为Web应用程序”。这将插入您需要的设计器文件。

这些是解决问题的绝对最佳步骤。


1

没有人提及的一件事是访问页面。我停止了我的设计器文件的重新生成,因为我包含了一个不存在的用户控件(由于各种原因),并且这里建议的所有操作都不起作用。无论出于什么原因,我都没有在Visual Studio中遇到任何错误-除了一个抱怨我的客户端控件不存在的原因,当然是因为它们没有被重新生成。

实际上需要访问该页面才能获得ASP.Net来告诉我该错误。


1

如果更新名称空间而不在设计器文件中更新名称空间,也会发生这种情况。修复:也更新设计器文件中的名称空间。


1

为我工作的解决方案是:

我只复制了页面并将其粘贴在同一部分,然后重命名了第一页(任何名称)并将复制的页面重命名为原始页面。现在可以访问控件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.